1

Comment est-il possible d'attribuer une clé étrangère dans url avec le framework Django REST?Clé étrangère du framework Django REST avec generics.ListCreateAPIView

class CommentList(generics.ListCreateAPIView): 
    serializer_class = CommentSerializer 
    pagination_class = StandardResultsSetPagination 
    queryset = Comment.objects.all() 
    def get(self, *args, **kwargs): 
     serializer = CommentSerializer(comment, many=True) 
     return super(CommentList, self).get(*args, **kwargs) 

Mon but est d'utiliser cette URL (urls.py):

url(r'^event/(?P<pk>[0-9]+)/comments', views.CommentList.as_view()) 

D'une certaine façon, je réussi à obtenir la clé étrangère avec cette façon

class CommentLikeList(APIView): 
    def get(self, request, *args, **kwargs): 
     key = self.kwargs['pk'] 
     commentLikes = CommentLike.objects.filter(pk=key) 
     serializer = CommentLikeSerializer(commentLikes, many=True) 
     return Response(serializer.data) 
    def post(self): 
     pass 

Mais je ne sais pas comment obtenir une clé étrangère avec une telle URL en utilisant '' generics.ListCreateAPIView ''

http://127.0.0.1:8000/event/<eventnumber>/comments 

Répondre

1

Si vous voulez obtenir le pk. Vous pouvez utiliser l'attribut lookup_url_kwarg de la classe ListCreateAPIView.

class CommentLikeList(ListCreateAPIView): 

    def get(self, request, *args, **kwargs): 
     key = self.kwargs[self.lookup_url_kwarg] 
     commentLikes = CommentLike.objects.filter(pk=key) 
     serializer = CommentLikeSerializer(commentLikes, many=True) 
     return Response(serializer.data) 

lookup_url_kwarg - L'argument de mot-clé URL qui doit être utilisé pour recherche d'objets. L'URL conf doit inclure un argument mot-clé correspondant à cette valeur. Si cette option est désactivée, la valeur par défaut est utilisée pour lookup_field.

La valeur par défaut pour lookup_field attribut est 'pk'. Donc, si vous changez votre argumentaire url argumento d'un autre différent de pk, vous devez alors définir lookup_url_kwarg.

class CommentLikeList(ListCreateAPIView): 
    lookup_url_kwarg = 'eventnumber' 

Vous pouvez consulter toutes les classes DRF méthodes et attributs ici: http://www.cdrf.co/