Django管理变更列表-限制字段为空的位置

Django管理变更列表-限制字段为空的位置,django,django-admin,Django,Django Admin,我正在设置一个新的Django应用程序,需要通过限制字段为空的记录来自定义给定表的管理。基本上是一个内置的,永久的过滤器 似乎需要覆盖changelist_视图,但我不确定该更改会是什么样子 没有要包含的代码,因为我现在没有覆盖变更列表视图。您可以覆盖默认管理器,但它有一个缺点,即您必须在所有查询中显式指定原始管理器: class MyManager(models.Manager): def get_query_set(self): return super(MyMana

我正在设置一个新的Django应用程序,需要通过限制字段为空的记录来自定义给定表的管理。基本上是一个内置的,永久的过滤器

似乎需要覆盖changelist_视图,但我不确定该更改会是什么样子


没有要包含的代码,因为我现在没有覆盖变更列表视图。

您可以覆盖默认管理器,但它有一个缺点,即您必须在所有查询中显式指定原始管理器:

class MyManager(models.Manager):
    def get_query_set(self):
        return super(MyManager, self).get_query_set().filter(my_field__isnull=False)

class MyModel(models.Model):
   objects = MyManager()
   all_objects = models.Manager()

MyModel.all_objects.all()    # all objects including those having my_field=None

目前还没有一个很好的方法来实现这一点-事实上Django上有一个开放的票证,要求能够定制管理员视图中使用的
QuerySet
——请参阅票证。将在短期内起作用,但您可能必须等到解决该问题后才能找到合适的解决方案。

我决定将有限的queryset manager用作对象。对于ModelAdmin,我已经从django/contrib/admin/options.py复制了queryset(),并通过我的无限queryset管理器更改了默认管理器。简单

谢谢你,安东尼。此示例适用于所有对象,对吗?MyManager和MyModel将使用该过滤器检索所有查询?django admin使用绑定到
.objects
的管理器。您可以使用您喜欢的任何管理器(无论是
对象
还是
所有对象
)。在某些情况下(如“反向”查找)
对象将自动用于查询中,因此如果您经常在代码中使用此模型,请搜索其他解决方案。这更像是一个快速修复。谢谢安东尼。改为写我自己的管理页面。欢迎。如果你能想出一个优雅的解决方案,请在这里写一行