web-dev-qa-db-de.com

Zugriff auf den Primärschlüssel von der URL in der Django-Klasse

Ich habe ein URL-Muster in meiner Django-App einer benutzerdefinierten Ansichtsklasse zugeordnet:

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

Das Problem ist, ich kann nicht herausfinden, wie ich von der URL-Musterzeichenfolge in meiner Ansichtsklasse auf "pk" zugreifen kann, sodass ich ein bestimmtes Modellobjekt basierend auf seiner Datenbank-ID abrufen kann. Ich habe gegoogelt, die Django-Dokumentation durchgesehen, Stack Overflow durchsucht und kann keine befriedigende Antwort finden.

Kann mir jemand sagen?

20
Luke

In einer klassenbasierten Ansicht werden alle Elemente der URL in self.args (wenn es sich um nicht benannte Gruppen handelt) oder self.kwargs (für benannte Gruppen) platziert. Für Ihre Ansicht können Sie also self.kwargs['pk'] verwenden.

47
Daniel Roseman

zugriff auf den Primärschlüssel in Ansichten post = 

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

Dies ist ein Beispiel, das auf Django restframework basiert, um ein Objekt mithilfe von pk in der URL abzurufen:

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