2016-07-19 10 views
0

Ich habe 2 Modelle in meiner App:Django REST Rahmen - zwingt Anfrage erhalten schließen Filter in ModelViewSet

class Comment(models.Model): 
    content = models.TextField('Content') 
    blog = models.ForeignKey('Blog', on_delete=models.CASCADE, related_name='comments') 

class Blog(models.Model): 
    content = models.TextField('Content') 

ich ModelViewSet in meinen Ansichten, um bin mit Objekten zu erhalten und zu erstellen und es funktioniert gut.

Mein Problem ist: Ich möchte für ein bestimmtes Blog-Objekt alle den Kommentar bekommen, so habe ich eine CommentViewSet (das erbt von ModelViewSet):

class CommentViewSet(viewsets.ModelViewSet): 
    queryset = Comment.objects.all() 
    serializer_class = CommentSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_class = CommentFilter 


    def perform_create(self, serializer): 
     try: 
      serializer.save(user=self.request.user) 
     except ValidationError as e: 
      raise NotAcceptable(e.message) 

ich einen Filter wie diese mysite.com/comment/?blog=X verwenden kann, um um es zu tun, aber ich möchte den Benutzer davon abhalten, alle Kommentare ohne diesen Filter anzufordern (mysite.com/comment/ wird alle Kommentare zurückgeben und es ist schlecht ...)

Ist es möglich?

Danke!

R

+0

Fügen Sie Ihre Ansicht in Frage –

+0

ich die CommentViewSet – Rani

Antwort

0

Unter der documentation example Sie benötigen einen empty QuerySet anstelle des vollständigen queryset in der aktuellen Rückkehr zurück:

class PurchaseList(generics.ListAPIView): 
    serializer_class = PurchaseSerializer 

    def get_queryset(self): 
     """ 
     Optionally restricts the returned purchases to a given user, 
     by filtering against a `username` query parameter in the URL. 
     """ 
     queryset = Purchase.objects.all() 
     username = self.request.query_params.get('username', None) 
     if username is not None: 
      queryset = queryset.filter(purchaser__username=username) 
     return queryset.none() 
+0

OK hinzugefügt. Ich denke eher, dass ich eine Ausnahme statt eines leeren Ergebnisses erhalte, aber das ist leicht zu ändern. Vielen Dank! – Rani

+0

BTW, ist es besser als das Erstellen einer Funktion im BlogViewSet, die alle Kommentare des Blogs (z. B. mysite.com/Blog/4/comments) zurückgibt? – Rani

+0

nop, weil es einen zweiten Einstiegspunkt für den gleichen Zweck erstellt. – Linovia

Verwandte Themen