Django:DetailView和多个子弹

时间:2018-07-03 12:47:15

标签: python django django-class-based-views

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

2 个答案:

答案 0 :(得分:1)

由于尝试访问 ` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { view.startDragAndDrop(dragData, myShadow, null, 0); } else { view.startDrag(dragData, myShadow, null, 0); }` 而出现错误,但是您没有在self.kwargs['order_reference']中使用order_reference

您的path()使用,

path()

因此,您可以使用'ticket/<slug:ticket_reference>/<slug:access_key>/' self.kwargs['ticket_reference']

由于您的路径不包含self.kwargs['access_key']slug,因此Django将不知道如何获取详细信息视图的对象。我会覆盖pk而不是get_object

get_queryset

答案 1 :(得分:0)

您有ticket_reference个url变量,但考虑到使用order_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'],
        )