gpt4 book ai didi

Django 模型管理器查询集过滤器对感知日期时间 : no item display until server restart

转载 作者:行者123 更新时间:2023-12-04 04:43:56 25 4
gpt4 key购买 nike

我有一个 Django 模型,它有一个 Publication_date 和一个 is_published 字段。我为这个模型创建了一个管理器,它返回所有已发布的项目,这意味着:每个具有 is_published=True 和 Publication_date <= now 的项目。

class PublishedTextManager(models.Manager):
"""
Filters out all unpublished items and items with a publication date in the future
"""
def get_query_set(self):
return super(PublishedTextManager, self).get_query_set() \
.filter(is_published=True) \
.filter(publication_date__lte=timezone.now())

使用此管理器的 View 如下所示:
class NewsAndEventsOverView(ListView):

model = News
queryset = News.published.all().order_by('-publication_date')
context_object_name = 'news_list'

def get_context_data(self, **kwargs):
# Initialize context and fill it with default data from NewsAndEventsOverView super class
context = super(NewsAndEventsOverView, self).get_context_data(**kwargs)
# Add view specific context
context['latest_news_item'] = context['news_list'][0]
today = timezone.now()
yesterday = today - timedelta(days=1)
context['upcoming_events_list'] = Event.published.filter(Q(date_end__gt=yesterday) | Q(date_start__gt=yesterday)).order_by('date_start')
past_events_list = Event.published.filter(Q(date_end__lt=today) | Q(date_start__lt=today)).order_by('-date_start')
old_news_list = context['news_list'][1:]
context['old_news_and_events_list'] = sorted(chain(old_news_list, past_events_list), key=lambda x: x.publication_date, reverse=True)
return context

相关urls.py:
from .views import NewsAndEventsOverView

urlpatterns = patterns('',
# Index page
url(r'^$', NewsAndEventsOverView.as_view(), name="newsandevents_overview"),
)

默认情况下,当我添加新闻项目时,它会接收当前日期时间(timezone.now())作为发布日期,但是当我刷新页面时,它不会显示在前端,直到我重新启动服务器(使用 django 内置- 在服务器自动取款机)。
我在阿姆斯特丹时间 (+2:00) 并且当我添加 2 小时到 Publication_date 过滤器时它工作正常,所以由于我是日期时间意识的新手,我猜我做错了什么。我已经尝试过带和不带括号的 timezone.now,但这并没有什么区别。

最佳答案

我遇到了类似的问题,这就是我认为正在发生的事情。当您使用 queryset class 属性,查询在每个请求上运行,但 timezone.now()经理内部的调用确实不是 get 在每个请求上运行,仅在类实例化时运行。尝试改用 get_queryset 方法,这会强制它在每个请求上运行:

class NewsAndEventsOverView(ListView):

model = News
context_object_name = 'news_list'

def get_queryset(self):
return News.published.all().order_by('-publication_date')

...

关于Django 模型管理器查询集过滤器对感知日期时间 : no item display until server restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18485287/

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