我得到了Story项目的模型/视图。我的目标是只给故事一段时间出现在我的网站上。
class Story(models.Model):
...
...
image = models.ImageField(upload_to='story/')
created_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
def save(self):
super().save()
@property
def is_active(self):
#now = timezone.now()
if (self.created_on + timedelta(days=10)) > datetime.now():
return False
return True
@method_decorator(login_required(login_url='/cooker/login'),name="dispatch")
class StoryList(generic.ListView):
queryset = Story.objects.order_by('-created_on')
template_name = 'user_list_story.html'
model = Story
我遇到这个问题:无法比较原始偏移量和感知偏移量的日期时间因此,我已尝试更正它,以便进行相同的比较。
@property
def is_active(self):
now = timezone.now()
if (self.created_on + timedelta(days=10)) > now:
return False
return True
但我的页面上什么也没有出现。这是代码模板。
{% for story in story_list %}
{% if story.is_active %}
{{ story.title }}
{% endif %}
{% endfor %}
无需执行此验证,您可以过滤查询集。这更有效,因为过滤是在数据库端完成的:
from django.contrib.auth.mixins importLoginRequiredMixin
from django.utils.timezone importnow
class StoryList(LoginRequiredMixin, generic.ListView):
queryset = Story.objects.order_by('-created_on')
template_name = 'user_list_story.html'
model = Story
login_url = '/cooker/login'
defget_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(
created_on__gte=now()-timedelta(days=10)
)
注意:您可以使用
LoginRequiredMixin
mixin[Django-doc]。