Python Django:DetailView和多个Slug

Python Django:DetailView和多个Slug,python,django,django-class-based-views,Python,Django,Django Class Based Views,我的DetailView有问题。我希望确保这两个值都在url字符串中,然后显示页面。但是,我总是在这里收到此错误: KeyError at /orders/ticket/ug2dc78agz-1/d04fkjmo37/ 'order_reference' views.py url.py 您有ticket\u reference url变量,但在视图中使用order\u reference。您应该将其重命名为: class TicketView(DetailView): model =

我的DetailView有问题。我希望确保这两个值都在url字符串中,然后显示页面。但是,我总是在这里收到此错误:

KeyError at /orders/ticket/ug2dc78agz-1/d04fkjmo37/
'order_reference'
views.py

url.py

您有ticket\u reference url变量,但在视图中使用order\u reference。您应该将其重命名为:

class TicketView(DetailView):
    model = Attendee
    template_name = 'orders/ticket_view.html'

    def get_queryset(self):
        return Attendee.objects.filter(
            order__order_reference=self.kwargs['ticket_reference'],
        ).filter(
            access_key=self.kwargs['access_key'],
        )

出现错误是因为您试图访问self.kwargs['order_reference'],但在路径中未使用order_reference

你的道路使用


啊,是的!这就解决了!它实际上是一张参考票。我只是从我的OrderListView中获取了order\u order\u引用,但忘了更改它。非常感谢。有趣的解决方案,谢谢!使代码更短。order\uuuu order\u reference\uuuu iexact=self.kwargs['access\u key']。如果引用字段中有大小字母和空格,请替换“-”。并使用Attendee.objects.filterid=self.object.id避免使用其他引用字段,而不是链接中的特定字段。
urlpatterns = [
    path(
        'ticket/<slug:ticket_reference>/<slug:access_key>/',
        TicketView.as_view(),
        name='ticket'
    ),
]
class TicketView(DetailView):
    model = Attendee
    template_name = 'orders/ticket_view.html'

    def get_queryset(self):
        return Attendee.objects.filter(
            order__order_reference=self.kwargs['ticket_reference'],
        ).filter(
            access_key=self.kwargs['access_key'],
        )
'ticket/<slug:ticket_reference>/<slug:access_key>/'
def get_object(self):
    return get_object_or_404(
        Attendee,
        order__order_reference=self.kwargs['slug:ticket_reference'],
        access_key=self.kwargs['access_key'],
    )