2017-06-14 14 views
1
class User(generics.RetrieveAPIView): 
    serializer_class = RetrieveLocalSerializer 
    queryset = User.objects.filter(
     fields_1=True, 
     fields_2=False 
    ) 

class LocalSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('field_1', 'field_2', 'field_3',) 

Die API funktionierte nicht so, wie ich es wünsche. Als ich versuchte, einen Benutzer zu bekommen, der nicht die Eigenschaft hat, die ich möchte, gab es immer noch das Ergebnis zurück.django - Wie kann ich im Serialisierer filtern

Ich habe sogar versucht, diese Funktion außer Kraft setzen, aber es hat auch nicht funktioniert.

def get_queryset(self): 
    return User.objects.filter(
     is_localguide=True, 
     state=PROFILE_STATE.PUBLISHED 
    ) 

Jede Hilfe wird geschätzt.

Antwort

3

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie eine Liste von Instanzen in Ihrer Sicht bekommen (mit Django Rest Framework). Das Problem ist, dass Ihre Ansicht von einer generics.RetrieveAPIView erbt. Diese Ansichtsklasse ruft die Methode self.retrieve(request, *args, **kwargs) auf, die Ihnen ein Objekt und kein queryset zurückgibt. Ich denke, dass Sie Ihre Ansicht von einer ListAPIView Klasse erben sollten. Diese Klasse erbt ListModelMixin die

Bietet eine .list (Anfrage, * args, ** kwargs) -Methode, die eine queryset Auflistung implementiert.

So Ihr Code wie folgt suchen:

class User(generics.ListAPIView): 
    serializer_class = RetrieveLocalSerializer 
    queryset = User.objects.filter(
     fields_1=True, 
     fields_2=False 
    ) 

Für weitere Informationen siehe http://www.django-rest-framework.org/api-guide/generic-views/#listapiview.

Sie können entweder Ihre queryset in einer Ansicht definieren oder überschreiben get_queryset Methode:

queryset - Die queryset, die für die Rückgabe von Objekten aus dieser Ansicht verwendet werden soll. In der Regel müssen Sie entweder dieses Attribut festlegen oder die Methode get_queryset() überschreiben. Wenn Sie eine Ansichtsmethode überschreiben, ist es wichtig, dass Sie get_queryset() aufrufen, anstatt direkt auf diese Eigenschaft zuzugreifen, da der Abfragesatz einmal ausgewertet wird und diese Ergebnisse für alle nachfolgenden Anforderungen zwischengespeichert werden.

Sie hier weitere Informationen finden: http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview

Hope this helfen)

Verwandte Themen