Django DetailView和get请求
我有一个带有下拉列表的详细视图。用户可以在下拉列表中选择一个项目,有关该项目的信息应显示在其下方。这要求DetailView包含如下内容: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
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