我的 DetailView 有问题。我想确保两个值都在网址字符串中,然后显示页面。但是我总是在这里收到此错误:
KeyError at /orders/ticket/ug2dc78agz-1/d04fkjmo37/
'order_reference'
views.py
class TicketView(DetailView):
model = Attendee
template_name = 'orders/ticket_view.html'
def get_queryset(self):
return Attendee.objects.filter(
order__order_reference=self.kwargs['order_reference'],
).filter(
access_key=self.kwargs['access_key'],
)
urls.py
urlpatterns = [
path(
'ticket/<slug:ticket_reference>/<slug:access_key>/',
TicketView.as_view(),
name='ticket'
),
]
最佳答案
您收到错误是因为您尝试访问 self.kwargs['order_reference']
,但您没有在 path( )
。
您的path()
使用,
'ticket/<slug:ticket_reference>/<slug:access_key>/'
因此您可以使用 self.kwargs['ticket_reference']
和 self.kwargs['access_key']
。
由于您的路径不包含 slug
或 pk
,Django 将不知道如何获取详细 View 的对象。我会覆盖 get_object
而不是 get_queryset
:
def get_object(self):
return get_object_or_404(
Attendee,
order__order_reference=self.kwargs['slug:ticket_reference'],
access_key=self.kwargs['access_key'],
)
关于python - Django:DetailView 和多个 slugs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51155021/