如果model有自定义管理器,我该如何使用默认值?

时间:2014-02-04 19:39:24

标签: python django

如果使用自定义管理器定义模型,但我需要使用默认的Django管理器django.db.models.manager.Manager查询数据库 - 我该怎么做?

更新
主要问题是我无法访问代码,模型没有标准管理器,只有自定义管理器。

1 个答案:

答案 0 :(得分:3)

保留默认管理器后的自定义管理器。像这样:

# Then hook it into the Book model explicitly.
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)

    objects = models.Manager() # The default manager.
    dahl_objects = DahlBookManager() # The Dahl-specific manager.

您可以同时使用Book.objects.<...>Book.dahl_objects.<...>进行过滤。但是,管理人员需要注意一些事项,尤其是默认的。来自managers documentation

  

如果您使用自定义管理器对象,请注意第一个管理器Django遇到(按照它们在模型中定义的顺序)具有特殊状态。 Django将类中定义的第一个Manager解释为“默认”管理器,Django的几个部分(包括dumpdata)将专门为该模型使用该Manager。因此,在选择默认管理器时要小心谨慎,以避免重写get_queryset()导致无法检索您想要使用的对象。

过去引起我头痛的提醒:

  

不要过滤掉此类管理器子类中的任何结果

     

使用自动管理器的一个原因是访问与其他模型相关的对象。在这些情况下,Django必须能够查看它所获取的模型的所有对象,以便可以检索所引用的任何内容。