Django管理员更改列表 - 限制字段为NULL的位置

时间:2010-01-13 20:06:32

标签: django django-admin

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

似乎需要覆盖changelist_view,但我不确定这种变化会是什么样的。

由于我现在没有覆盖changelist_view,因此无法包含任何代码。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

目前还没有一种好方法可以做到这一点 - 事实上,Django上有一个开放的票据,要求能够自定义QuerySet用于管理员视图的内容 - 请参阅票证#10761Antony's solution将在短期内发挥作用,但您可能需要等到该故障单得到解决才能获得正确的解决方案。

答案 2 :(得分:0)

我决定使用有限的查询集管理器作为对象。对于ModelAdmin,我从django / contrib / admin / options.py复制了 queryset(),并通过我的无限查询集管理器更改了_default_manager。简单!