Skip to main content
 首页 » 编程设计

python之Django:DetailView 和多个 slug

2024年08月15日37wuhuacong

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

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'],但是你没有在 路径中使用 order_reference( )。

你的 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'], 
    )