You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中不新增自定义模型管理器如何重写模型的get_queryset方法?

Django Slot模型自动过滤NULL state实现方案

核心思路

将带过滤逻辑的自定义管理器设为默认的objects管理器,原有全量查询能力通过重命名的独立管理器保留,无需修改任何现有业务调用代码。

完整实现代码

# 自定义带过滤逻辑的管理器
class NonNullStateSlotManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(state__isnull=False)

# 改造后的Slot模型
class Slot(models.Model):
    # 补充null=True适配允许NULL的需求(原有代码缺少该配置)
    state = models.CharField(max_length=20, choices=SLOT_STATE, default=SLOT_STATE[0][0], null=True)
    
    # 第一位声明的管理器为默认管理器,原有所有调用Slot.objects的代码无需修改
    objects = NonNullStateSlotManager()
    # 保留全量查询能力,需要查询含state为NULL的记录时调用
    all_objects = models.Manager()

注意事项

  • 现有所有使用Slot.objects的业务代码无需任何调整,自动生效state非NULL的过滤规则
  • 关联查询、get_object_or_404等Django内置快捷方法都会默认使用带过滤规则的管理器,符合预期
  • 若需要查询包含state为NULL的全量记录,直接调用Slot.all_objects即可

内容的提问来源于stack exchange,提问作者raj-kapil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:36:03