gpt4 book ai didi

Django 列表详细信息 View 将查询集保存到内存(不更新)?

转载 作者:行者123 更新时间:2023-12-02 02:55:34 24 4
gpt4 key购买 nike

我有一个自定义模型管理器,如下所示:

class MyManager(models.Manager)
def get_query_set(self):
'''Only get items that are 'approved' and have a `pub_date` that is in
the past. Ignore the rest.'''
queryset = super(MyManager, self).get_query_set()
queryset = queryset.filter(status__in=('a',))
return queryset.filter(pub_date__lte=datetime.utcnow())

这已经足够好了;但是,我在使用 Django 的 generic.list_detail View object_detailobject_list 时遇到问题:查询集似乎仅加载一次 并且,正因为如此,它没有获取应有的项目,因为我认为 utcnow() 时间只被调用了一次(当它第一次加载时)。

我认为这是故意的,旨在提高性能 - 然而,这意味着视频会显示在网站的其他位置(在我不在 object_detail 中的地方view),然后才能在 object_detail View 中使用(请参阅下面的 urls.py)。这会导致 404s ...

有什么想法吗?或者我是否必须编写自己的自定义 View 来避免这种情况?

谢谢!

urls.py

url(r'^video/(?P<object_id>\d+)$', 
list_detail.object_detail,
{ 'queryset': Video.objects.all(), },
name='video_detail',
),

最佳答案

这不是缓存问题:正如您现在所做的那样,查询集定义在解析网址时被评估一次,然后就不再评估。

解决方案实际上非常简单,在线文档中进行了描述:Complex filtering with wrapper functions :只需创建一个小的自定义 View ,它将简单地调用通用 View 。
我实际上经常使用类似的解决方案,而且感觉很舒服。

顺便说一句,对于这种情况,我建议不要使用自定义管理器,而是返回正常的过滤。

关于Django 列表详细信息 View 将查询集保存到内存(不更新)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856830/

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