Je suis nouveau dans le Framework Django et une chose me dérange.Django url pattern multiple Paramètres (sans pk)
Je veux simple appel de repos:
www.abc.com/users/1/cantonments/1/
Si j'utilise 'pk' dans le tout motif url fonctionne hors de la boîte (pk, PK1, PK2 ....). Mais j'ai une fonctionnalité d'autorisation qui attend les paramètres dans kwargs sous la forme 'upk' et 'cpk' pour l'utilisateur et le cantonnement. Donc, si je change pk à upk tout se brise. D'une certaine manière, l'url a besoin d'un pk.
Cela fonctionne:
url(r'^users/(?P<pk>[0-9]+)/cantonments/(?P<cpk>[0-9]+)/$',
views.CantonmentDetail.as_view()),
Ce ne marche pas:
url(r'^users/(?P<upk>[0-9]+)/cantonments/(?P<cpk>[0-9]+)/$',
views.CantonmentDetail.as_view()),
Est-il possible d'avoir un modèle d'URL qui n'a pas besoin d'une entrée avec pk?
P.S. L'erreur:
Expected view CantonmentDetail to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.
EDIT:
Mon point de vue est simple:
# Authenticated User can show Cantonment Detail
class CantonmentDetail(generics.RetrieveAPIView):
serializer_class = serializers.CantonmentSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Cantonment.objects.filter(pk=self.kwargs['cpk'])
Edit2:
J'ai changé get_queryset pour obtenir l'objet et il fonctionne.
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
obj = queryset.get(pk=self.kwargs['cpk'])
return obj
Edit3: En utilisant
lookup_url_kwarg = "cpk"
dans la classe fonctionne aussi bien.
montrer votre point de vue? – zaidfazil
votre view.py peut problème obtenir l'argument peut ajouter ceci – Robert