gpt4 book ai didi

python - 如何在 django CBV 中显示之前检查对象状态

转载 作者:行者123 更新时间:2023-12-01 01:02:40 28 4
gpt4 key购买 nike

我想检查 View 中对象的状态。如果为 True,则不会发生任何变化,但如果状态不为 True,我想将用户重定向到另一个页面。

以下是我的观点:

class ProductDetailView(LoginRequiredMixin, MultiSlugMixin, DetailView):
model = Product

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
product_name = self.object.title
category_commission = self.object.category.commission
data = Stocks.objects.filter(product__title__icontains=product_name).order_by('price')
context['category_commission'] = category_commission
context['stocks'] = data

return context

我在产品模型中有一个状态字段,如下所示:

status = models.BooleanField(default=False)

我想要实现这样的目标:

if self.object.status:
do sth
else:
redirect('productlistpage')

最佳答案

状态不为True时显示404页面非常简单,只需重写get_queryset即可。

def get_queryset(self):
return = super(ProductDetailView, self).get_queryset().filter(status=True)

但是,这并不完全是您所要求的行为。如果您想重定向,则必须重写 getdispatch,例如:

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() 中的代码。方法,但它使代码流程清晰。您可以在 get() 方法中调用 super(),但最终会调用 get_object() 两次,或者不必要地渲染重定向之前的模板。

关于python - 如何在 django CBV 中显示之前检查对象状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55649297/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com