angenommen, diese URL:
http://localhost:8000/articles/1111/comments/
ich möchte alle Kommentare zu einem bestimmten Artikel erhalten (hier der 1111).
So erfasse ich diese URL:
url(r'^articles/(?P<uid>[-\w]+)/comments/$', comments_views.CommentList.as_view()),
Die zugehörige Ansicht sieht folgendermaßen aus:
class CommentList(generics.ListAPIView):
serializer_class = CommentSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
lookup_field = "uid"
def get_queryset(self):
comments = Comment.objects.filter(article= ???)
return comments
Zur Information der zugehörige Serializer
class CommentSerializer(serializers.ModelSerializer):
owner = UserSerializer()
class Meta:
model = Comment
fields = ('id', 'content', 'owner', 'created_at')
Wie Sie sehen können, habe ich mein get_queryset aktualisiert, um Kommentare zum Artikel zu filtern, aber ich weiß nicht, wie ich den "uid" -Parameter abfangen soll. Mit einer URL, die mit? Uid = value endet, kann ich self.request.QUERY_PARAMS.get ('uid') verwenden, aber in meinem Fall weiß ich nicht, wie ich das machen soll. Eine Idee ?
Der URL-Parameter wird in self.kwargs
Gespeichert. lookup_field
Ist das Feld (standardmäßig pk), das die generische Ansicht im ORM beim Aufrufen einzelner Modellinstanzen verwendet. lookup_url_kwarg
Ist wahrscheinlich die gewünschte Eigenschaft.
Versuchen Sie also Folgendes:
class CommentList(generics.ListAPIView):
serializer_class = CommentSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
lookup_url_kwarg = "uid"
def get_queryset(self):
uid = self.kwargs.get(self.lookup_url_kwarg)
comments = Comment.objects.filter(article=uid)
return comments