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

发布于 2024-08-18 11:20:51 字数 162 浏览 5 评论 0原文

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

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

没有要包含的代码,因为我现在没有覆盖changelist_view。

I'm setting up a new Django app and need to customize the Admin for a given table by restricting the records where a field is NULL. Basically a built-in, permanent filter.

Seems like changelist_view needs to be overridden, but I'm uncertain what that change would look like.

There's no code to be included as I'm not overriding changelist_view right now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吖咩 2024-08-25 11:20:51

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

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

You can override default manager, but it has a drawback that you'll have to explicitly specify original manager in all your queries:

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
空城旧梦 2024-08-25 11:20:51

目前还没有一个真正好的方法来做到这一点 - 事实上 Django 上有一个开放票证,请求能够自定义用于管理视图的 QuerySet - 请参阅票证 #10761安东尼的解决方案将在短期内发挥作用,但您可能必须等到该票证得到解决才能找到正确的解决方案。

There's not really a good way to do this at present - there is in fact an open ticket on Django requesting the ability to customise what QuerySet gets used for the admin views - see ticket #10761. Antony's solution will work in the short term, but you may have to wait until that ticket is resolved for a proper solution.

︶ ̄淡然 2024-08-25 11:20:51

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

I've decided to use limited queryset manager as objects. For ModelAdmin I've copied queryset() from django/contrib/admin/options.py and changed _default_manager by mine unlimited queryset manager. Simple!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文