Django DetailView和get请求

Django DetailView和get请求,django,django-views,Django,Django Views,我有一个带有下拉列表的详细视图。用户可以在下拉列表中选择一个项目,有关该项目的信息应显示在其下方。这要求DetailView包含如下内容: def get_context_data(self, **kwargs): context = super(InvoiceDetail, self).dispatch(*args, **kwargs) request = self.request if request.GET: try: in

我有一个带有下拉列表的详细视图。用户可以在下拉列表中选择一个项目,有关该项目的信息应显示在其下方。这要求DetailView包含如下内容:

def get_context_data(self, **kwargs):
    context = super(InvoiceDetail, self).dispatch(*args, **kwargs)
    request = self.request

    if request.GET:
        try:
            invoice_selector = request.GET.get('invoice_selector', None)
            invoice = Invoice.objects.get(id = int(invoice_selector) ) # either a string representing a number or 'add invoice'
            context_object_model = invoice
        except ValueError:
            return HttpResponseRedirect(reverse('accounting:add_invoice'))

    return context

如何重写上下文\对象\模型?上面的代码不进行更改。

这不是在获取上下文数据时应该做的事情。您应该在get方法中检查addinvoice,并在get\u对象中执行其余操作


谢谢你的回答。它确实引导我走上了正确的道路。但是,它需要一些修改才能完美工作。我编辑了你的答案。
class MyDetailView(DetailView):
    ...
    def get(self, request, *args, **kwargs):
        self.invoice_selector = request.GET.get('invoice_selector')
        if self.invoice_selector = 'add invoice':
            return HttpResponseRedirect(reverse('accounting:add_invoice'))
        return super().get(request, *args, **kwargs)

    def get_object(self):
        if self.invoice_selector:
            obj = self.model.objects.get(pk=self.invoice_selector)
        else:
            obj = super().get_object()

        return obj