我有一台包含published_date字段的Promotion型号.我想限制对future 促销的访问权限,只允许登录的用户预览他们的促销.
class Promotion(models.Model):
title = models.CharField(max_length=100, blank=False, null=False)
...
promotion_date = models.DateField(blank=False, null=True)
目前,我正在运行一个简单的基于类的DetailView:
class PromotionDetailView(generic.DetailView):
model = Promotion
context_object_name = 'book'
template_name = 'PromoManager/book_detail.html'
但我不确定如何或何时拦截此请求,并在Promotion_Date大于今天的情况下为非登录用户添加重定向条件.我目前使用的是Simple_Tag,它返回一个 bootstrap alert ,突出显示future 的促销活动,但这纯粹是可视化的.
in_the_future = timezone.now().date()
if hasattr(book, 'promotion_date') and book.promotion_date > in_the_future:
return ...appropriate message...
如果我是通过基于函数的视图来做这件事,我会用一个结合了重定向的if语句来实现它.我考虑过通过DetailView/TemplateView和GET_CONTEXT_DATA使用相同的方法,但感觉不太对劲.
如果Promotion_Date是future 的,我如何最好地拦截请求并为非登录用户重定向页面?