Django - 无法比较偏移量和偏移量感知日期时间,或者没有结果出现



我得到了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)
)

注意:您可以使用LoginRequiredMixinmixin[Django-doc]。

最新更新