Очень просто отобразить страницу 404, когда статус не True
, просто переопределить get_queryset.
def get_queryset(self):
return = super(ProductDetailView, self).get_queryset().filter(status=True)
Однако, это не совсем то поведение, о котором вы просили. Если вы хотите перенаправить, вам придется переопределить get
или dispatch
, например:
class ProductDetailView(LoginRequiredMixin, MultiSlugMixin, DetailView):
...
def get(self, request, *args, **kwargs):
self.object = self.get_object()
if not self.object.status:
return redirect('productlistpage')
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
Это не идеально, потому что вы дублируете код из метода BaseDetailView.get()
, но это делает поток кода понятным. Вы можете вызвать super()
в вашем get()
методе, но тогда вы в конечном итоге вызовете get_object()
дважды или излишне отобразите шаблон перед перенаправлением.