web-dev-qa-db-fra.com

Accéder à la clé primaire à partir d'une URL dans Django View Class

J'ai un modèle d'URL mappé à une classe de vue personnalisée dans mon application Django, comme suit:

url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))

Le problème est que je ne peux pas comprendre comment accéder à 'pk' à partir de la chaîne de modèle d'URL dans ma classe de vue afin de pouvoir récupérer un objet de modèle spécifique en fonction de son ID de base de données. J'ai cherché sur Google, parcouru la documentation Django, fouillé Stack Overflow et je ne trouve pas de réponse satisfaisante.

Quelqu'un peut-il me dire?

20
Luke

Dans une vue par classe, tous les éléments de l'URL sont placés dans self.args (s'il s'agit de groupes non nommés) ou self.kwargs (pour les groupes nommés). Donc, pour votre vue, vous pouvez utiliser self.kwargs['pk'].

47
Daniel Roseman

pour accéder à la clé primaire dans les vuespost = 

Class_name.objects.get(pk=self.kwargs.get('pk'))
3
raghu

Ceci est un exemple basé sur Django restframework pour récupérer un objet en utilisant pk dans l'URL:

views.py

class ContactListView(generics.ListAPIView):
    queryset = Profile.objects.all()
    serializer_class = UserContactListSerializer

    def get(self, request, pk, *args, **kwargs):
        contacts = Profile.objects.get(pk=pk)
        serializer = UserContactListSerializer(contacts)
        return Response(serializer.data)

urls.py

    url(r'^contact_list/(?P<pk>\d+)/$', ContactListView.as_view())
0
Milad shiri