You need to enable JavaScript to run this app. Django的get_queryset方法如何同时设置筛选与排序两个条件
优惠活动
大模型
产品
解决方案
定价
更多

Django的get_queryset方法如何同时设置筛选与排序两个条件

解决方法

你重写get_queryset方法时直接返回了自定义的查询集,没有继承ListView内置的排序逻辑,所以类属性里定义的ordering = '-data'不会生效,有两种实现方式可选:

方案1:直接在自定义查询集后追加排序

修改你的views.py里的get_queryset方法,在过滤后加上排序规则:

def get_queryset(self):
    # 过滤已发布内容,同时按创建时间倒序(最新的在前)
    return Post.objects.filter(public=True).order_by('-data')

如果需要按创建时间正序排列,把-data的减号去掉改为order_by('data')即可。

方案2:调用父类方法保留内置排序逻辑

如果不想重复写排序规则,也可以调用父类的get_queryset方法,这样你之前定义的ordering类属性会自动生效:

def get_queryset(self):
    # 先调用父类方法获取默认带排序的查询集,再追加过滤条件
    queryset = super().get_queryset()
    return queryset.filter(public=True)

小提示:注意你模型中创建时间字段命名为data,和常规的date命名不同,后续开发时注意不要写错字段名导致报错。

内容的提问来源于stack exchange,提问作者Black Black

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 09:15:03