加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django的list_details视图将查询集保存到内存(不更新)?

发布时间:2020-12-20 11:12:12 所属栏目:Python 来源:网络整理
导读:我有一个自定义模型管理器,如下所示: 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_se
我有一个自定义模型管理器,如下所示:

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视图object_detail和object_list:查询集似乎只加载一次,因此,它没有提取它应该是的项目,因为,我认为,utcnow()时间已被调用一次(首次加载时).

我认为这是故意的并且意味着性能提升 – 但是,这意味着视频在site_detail视图中可用之前显示在网站的其他位置(在我不在object_detail视图中的位置)(请参阅下面的urls.py) .这导致404s ……

有任何想法吗 ?或者我是否必须编写自己的自定义视图以避免这种情况?

谢谢!

urls.py

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

解决方法

这不是缓存的问题:正如您现在所做的那样,查询集定义在解析URL时被评估一次,然后再从不再进行评估.

解决方案实际上非常简单,并在在线文档中进行了描述:Complex filtering with wrapper functions:只需创建一个小型自定义视图,即可调用通用视图.
我实际上使用了类似的解决方案,我觉得很舒服.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读