0

我需要添加一种方法来查看输入到该站点的所有产品。现在,它们通过启用=True 进行过滤,这仅显示启用的产品。我希望能够列出所有产品并在管理员中启用和禁用它们。提前致谢!

模型:

class ProductManager(models.Manager):
    """
    Filters enabled product
    """

    def get_query_set(self):
        return super(ProductManager, self).get_query_set().filter(is_enabled=True)
4

1 回答 1

1

Django 文档对此非常明确。特别是如果您是 Django 世界的新手,您应该像温暖的毯子一样将自己包裹在文档中。如果您有时间(尽量腾出时间),请通读它们,但如果您不能,只需使用“django”搜索 Google 以及您遇到的任何问题。99% 的情况下,第一个结果是来自 Django 文档的页面,其中包含您需要的信息。

也就是说,文档在这个问题上说

如果您使用自定义 Manager 对象,请注意 Django 遇到的第一个 Manager (按照它们在模型中定义的顺序)具有特殊状态。Django 将类中定义的第一个管理器解释为“默认”管理器,并且 Django 的几个部分(包括转储数据)将专门为该模型使用该管理器。因此,最好谨慎选择默认管理器,以避免覆盖 get_query_set() 导致无法检索您想要使用的对象的情况。(强调我的)

这正是你正在经历的。再看上面引文的第一句话。Django 使用它遇到的第一个管理器作为其机器各个部分的“默认”管理器,包括管理员。因此解决方案是在您的自定义管理器之前简单地添加一个非过滤管理器。最好的方法是简单地使用 Django 自动添加的标准管理器,如果您不提供自己的。

objects = models.Manager()
product_manager = ProductManager()

完毕。管理员现在将列出所有产品,因为它将使用第一个标准管理器作为默认值。

于 2012-07-10T18:33:52.143 回答