如果使用自定义管理器定义模型,但我需要使用默认的Django管理器django.db.models.manager.Manager
查询数据库 - 我该怎么做?
更新
主要问题是我无法访问代码,模型没有标准管理器,只有自定义管理器。
答案 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必须能够查看它所获取的模型的所有对象,以便可以检索所引用的任何内容。