2017-09-20 4 views
1

ich zuvor APIViews wie die folgenden verwenden:Django REST und ModelViewSet Filterung

views.py

class AllProgramsApi(APIView): 

    def get(self, request): 
     user = self.request.user 
     userprograms = Program.objects.filter(user=user) 
     serializer = ProgramSerializer(userprograms, many=True) 
     return Response(serializer.data) 

hier ist mein Modell:

class Program(models.Model): 

    program_name = models.CharField(max_length=50) 
    program_description = models.CharField(max_length=250) 
    cycles = models.ManyToManyField(Cycle) 
    is_favourite = models.BooleanField(default="False") 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 

    def get_absolute_url(self): 
     return reverse('programs:program', kwargs={'pk': self.pk}) 

    def __str__(self): 
     return self.program_name 

Jetzt entdeckt ModelViewSet Ich habe, Das sieht sehr praktisch aus, aber ich kann anscheinend nicht in der Lage sein, für den Benutzer zu filtern, wie ich es zuvor in der APIView getan habe.

mein Versuch von views.py mit ModelViewSet ist das Folgende und es funktioniert, aber ich bekomme den gesamten Inhalt und nicht nur den Inhalt für einen einzelnen Benutzer.

class AllProgramsApi(ModelViewSet): 
    serializer_class = ProgramSerializer 
    queryset = Program.objects.all() 

Wie kann ich die ModelViewSet optimieren, so dass sie nur den Inhalt für den Benutzer im Zusammenhang zeigt, der die Anforderung sendet? Was ist die beste Methode?

Danke.

Antwort

3

Sie können verwenden bekommen queryset Methode, wenn Sie mehr beziehen sich die doc wissen Filtering against the current user

class AllProgramsApi(ModelViewSet): 
    serializer_class = ProgramSerializer 
    queryset = Program.objects.all() 
    def get_queryset(self): 
     queryset = self.queryset 
     query_set = queryset.filter(user=self.request.user) 
     return query_set 
1

gibt es permission_classes in django Sie Berechtigungen gemäß Ihren Anforderungen hinzufügen können, oder Sie können benutzerdefinierte Berechtigungen erstellen

erhalten Sie eine bessere Idee von django permission

oder Sie können Ihre Abfrage erstellen, indem Sie get_queryset -Methode definieren.

Verwandte Themen