每次在Django中使用视图/上下文处理器时重新评估新对象?

时间:2016-08-30 22:21:42

标签: django django-models django-views

每次使用视图或上下文处理器时,我都需要进行查询。目前我使用了一个查询集。但我意识到我无法将其用于我的案例。

我需要像查询集一样进行查询以检索数据库中的最新对象。我需要再次重新评估它,以便用户看到新对象。

这就是我目前使用的内容:

class EntryListView(ListView):

    model = Entry

    def get_context_data(self, **kwargs):
        context = super(EntryListView, self).get_context_data(**kwargs)
        context.update({
            'all_entries': Entry.objects.filter(status=2, publish_date__lte=datetime.date.today())[:40],
        })
        return context

如何进行查询,以便每次使用视图或上下文处理器时都会获取最新的40个对象?

现在的结果是它使用了缓存版本。所以它永远不会在网站上更新。

修改

我如何访问模板中的上下文是:

{% for post in all_entries %}
    {% post.title %}
{% endfor %}

网址:

url(r'^all-entries/$', PostListView.as_view(template_name='all_entries.html'), name='all_entries'),

1 个答案:

答案 0 :(得分:0)

您正在使用的此查询集转换为 - 获取状态为2且以date< = today发布的前40个Entry对象。使用此逻辑,查询集始终返回前40个条目 - 这解释了您认为视图缓存结果的原因。

Entry.objects.filter(status=2, publish_date__lte=datetime.date.today())[:40],

我们需要按降序排序结果,以便按照您想要的方式获得结果。我不知道你的模型看起来如何,但我假设publish_date是一个日期字段,所以我们不能使用它。如果您未明确指定主键,我们应该能够使用自动创建的 id 来订购我们的结果。

Entry.objects.filter(status=2, publish_date__lte=datetime.date.today()).order_by('-id')[:40]