gpt4 book ai didi

django - 自定义管理器在现场过滤对象但不在管理中?

转载 作者:行者123 更新时间:2023-12-04 07:29:23 25 4
gpt4 key购买 nike

我关注了 this example它工作得很好,但我想知道我是否可以放入一个异常,以便当我在管理员中时所有对象都显示(事件和非事件)。这可能很简单,但我在文档中找不到如何做。

这是我的经理现在的样子:

class ShareManager(models.Manager):
def get_query_set(self):
return super(ShareManager, self).get_query_set().filter(active=True)

最佳答案

想到了几种解决方案:

  • 使用 ModelAdmin.queryset() 定义用于更改列表的查询集.
  • 在您的模型上安装 2 个管理器,管理员找到的第一个管理器将用作默认的 AFAIK。
    class SomeThing(models.Model):
    objects = models.Manager()
    shares = ShareManager()
  • 在您的自定义管理器上添加新方法,该方法仅返回事件内容并离开 get_query_set因为它是默认的。
    class ShareManager(models.Manager):
    def get_active_items(self):
    return self.get_query_set().filter(active=True)

  • 跟进

    我认为最适合您的解决方案是结合 #1 和 #2 的变体。

    将您的自定义管理器设置为 objects所以每个人都可以访问它(我认为这应该可以解决您的可重用性问题)并且还在您的模型上安装默认管理器并在 ModelAdmin.queryset() 中使用它.
        class SomeThing(models.Model):
    objects = ShareManager()
    admin_objects = models.Manager()

    我应该包括 ModelAdmin.queryset()方法示例也是如此,所以在这里。
        def queryset(self, request):
    qs = self.model.admin_objects.get_query_set()
    # TODO: this should be handled by some parameter to the ChangeList.
    # otherwise we might try to *None, which is bad ;)
    ordering = self.ordering or ()
    if ordering:
    qs = qs.order_by(*ordering)
    return qs

    注意行 qs = self.model.admin_objects.get_query_set()正在与 admin_objects 合作
    这是普通管理器的实例,包括未发布的项目。
    queryset 的其余实现方法是 Django 的默认实现,通常调用 qs = self.model._default_manager.get_query_set() .

    我希望这能让事情变得清晰一点。

    关于django - 自定义管理器在现场过滤对象但不在管理中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489857/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com