urls.py
url(r"^customer/(?P<name>[^s]+)/$", customerDetailView.as_view(), name="customerDetailView"), #pass "name" variable
und
views.py
class customerDetailView(DetailView):
context_object_name = "customerDetail"
template_name = "customer.html"
allow_empty = True
def __init__(self, name=None, *args):
self.name = name # name is "None"... Why...?
def get_queryset(self):
return Customer.objects.get(name=self.name)
Ich frage nur "192.168.1.5/customer/abc/", aber "name" ist keine ...
Wie erhält man "Name"? Was soll ich machen?
bearbeiten-----
views.py
class customerDetailView(DetailView):
context_object_name = "customerDetail"
template_name = "customer.html"
allow_empty = True
"""
def __init__(self, **kwargs):
import pdb;pdb.set_trace()
self.name = kwargs["name"]
"""
def get_queryset(self):
# import pdb;pdb.set_trace()
self.name = self.kwargs["name"] # Thanks Kay Zhu!!
return Customer.objects.get(name=self.name)
Ich wende Code an, den Sie beantwortet haben.
Dann erhalte ich einen Fehler
Generic detail view customerDetailView must be called with either an object pk or a slug.
Also brauche ich "PK" ...
Was soll ich machen?
Antworten:
1 für die Antwort № 1Sie sollten auf den Parameter mit zugreifen können self.kwargs["name"]
. Des Weiteren, get_queryset
sollte stattdessen ein Abfrage-Set zurückgeben.
Sie müssen auch verwenden pk
Anstatt von name
in Ihrer URL, wenn Sie verwenden möchten DetailView
allgemeine Ansicht. Danach müssen Sie nur definieren model = Customer
und slug_field = "name"
in deinem customerDetailView
Klasse und es sollte funktionieren. Sie müssen nicht darauf zugreifen self.kwargs["name"]
überhaupt. [Quelle]
Wenn du Ja wirklich Möchte benutzen <name>
In Ihrer URL müssen Sie auch ändern slug_url_kwarg
zu name
(zusätzlich zu slug_field = "name"
:
class customerDetailView(DetailView):
context_object_name = "customerDetail"
template_name = "customer.html"
allow_empty = True
model = Customer
slug_field = "name"
slug_url_kwarg = "name"
# no need to override any methods here
oder überschreiben get_object
durch:
def get_object(self):
return get_object_or_404(Customer, name=self.kwargs["name"])
ohne zu modifizieren slug_field
und slug_url_kwarg
in deiner Klasse.