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:只需创建一个小型自定义视图,即可调用通用视图. 顺便说一句,一个小小的注意事项,对于这种情况,我建议不要使用自定义管理器,而是返回正常的过滤. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |