简体   繁体   中英

Django: DetailView and multiple slugs

I have an issue with my DetailView. I want to make sure both values are in the url string and then want to display the page. However I am always receiving this error here:

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

You get the error because you are trying to access self.kwargs['order_reference'] , but you don't use order_reference in the path() .

Your path() uses,

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

therefore you can use self.kwargs['ticket_reference'] and self.kwargs['access_key'] .

Since your path does not contain slug or pk , Django will not know how to fetch the object for the detail view. I would override get_object instead of 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'],
    )

You have ticket_reference url variable, but in view using order_reference . You should rename it:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM