Я переписываю свою функцию в представления на основе классов, эта функция у меня есть в настоящее время.
@login_required
def invoice(request, invoice_no, template_name="invoice.html"):
context = {}
invoice_exists = Invoice.objects.filter(invoice_no=invoice_no)
if invoice_exists:
context['invoice'] = invoice_exists.first()
else:
return HttpResponseRedirect(reverse('invoices'))
return render(request, template_name, context)
Вы должны войти в систему, она фильтруется с использованием фильтра с именем invoice_no
path('invoice/<int:invoice_no>', views.InvoiceView.as_view(), name="invoice"),
и, если найдено совпадение, возвращает его, если нет, перенаправляет вас обратно на страницу счетов.
это то, что у меня как класса
class InvoiceView(DetailView):
queryset = Invoice.objects.all()
context_object_name = 'invoice'
pk_url_kwarg = 'invoice_no'
template_name = "invoice.html"
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
def get_object(self):
obj = super().get_object()
return obj
также get object или 404 тоже подойдут, так как все, что нужно, это страница 404, и она будет работать.