2016-11-11 3 views
1

Wie können wir eine Funktion in ModelViewSet schreiben, die eine Liste von verschiedenen Datensatz in der Datenbank erhalten?So erhalten Sie eine benutzerdefinierte Liste in einem Viewset

Angenommen, dass wir dieses Modell haben.

class Animal(models.Model): 

    this_id = models.CharField(max_length=25) 
    name = models.CharField(max_length=25) 
    species_type = models.CharField(max_length=25) 
    ... 

und Serializer

class AnimalSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Animal 
     fields = (
      'this_id', 
      'name', 
      'species_type', 
      ..., 
     ) 
     read_only_fields = ('id', 'created_at', 'updated_at') 

und Viewset.

class AnimalViewSet(viewsets.ModelViewSet): 
    """ 
    This viewset automatically provides `list`, `create`, `retrieve`, 
    `update` and `destroy` actions. 
    """ 
    queryset = Animal.objects.all() 
    serializer_class = AnimalSerializer 

Ich fand diese link nützlich wie Dekorateure wie @list_route() aber ich es auch nicht verstehen kann.

würde Ich mag von der Viewset Liste verschiedener Animal.species_type Aufzeichnung erhalten. Bitte helfen Sie.

Antwort

1

Es gibt verschiedene Filteroptionen. Sie können den Artentyp über Ihre Anfrage senden /animals?species_type=MusMusculus und referenzieren, wenn Sie die Methode get_queryset() in der Ansicht überfahren.

Ihrer Ansicht

def get_queryset(self): 
    species = self.request.query_params.get('species_type', None) 
    if species is not None: 
     queryset = Animals.objects.all().distinct('species_type') 
     species = SpeciesSerializer(data=queryset) 
    return queryset 

Serializer

from rest_framework import serializers 
class Species(serializers.Serializer): 
    species_type = serializers.Charfield() 

alternativ können Sie eine django Filterrahmen http://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend

+1

nehmen, nicht, was ich ist Herr meine, würde Ich mag eine Funktion aufzurufen das alle distinct types_type record in meiner Datenbank über Viewset bekommt. Es bedeutet, dass ich keine Anfrage mit einem bestimmten Spezies-Typ machen würde. –

+0

also willst du nur spezies type ?? Ich habe meine Antwort editiert – Dap

+0

So dass es bedeutet, dass wir es in einer anderen Serializer-Klasse definieren können? hört sich toll an und ich mag die Idee über den 'URL_Pfad'. –

Verwandte Themen