Джанго: DetailView и несколько слагов - PullRequest
0 голосов
/ 03 июля 2018

У меня проблема с моим 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 голосов
/ 03 июля 2018

Вы получаете ошибку, потому что пытаетесь получить доступ к self.kwargs['order_reference'], но вы не используете order_reference в path().

Ваше path() использует,

'ticket/<slug:ticket_reference>/<slug:access_key>/'

, поэтому вы можете использовать self.kwargs['ticket_reference'] и self.kwargs['access_key'].

Поскольку ваш путь не содержит slug или pk, Джанго не будет знать, как получить объект для подробного вида. Я бы переопределил 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'],
    )
0 голосов
/ 03 июля 2018

У вас есть 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'],
        )
...