我已经向以下模型宣布了一位经理,但在这样做之后,我再也无法使用List.objects.get()
了。有谁知道为什么?
class List(models.Model):
title = models.CharField(max_length=20, unique=True)
archived = models.BooleanField()
archived_lists = ArchivedListManager()
active_lists = ActiveListManager()
经理:
class ArchivedListManager(models.Manager):
def get_query_set(self):
return super(ArchivedListManager, self).get_query_set().filter(archived=True)
class ActiveListManager(models.Manager):
def get_query_set(self):
return super(ActiveListManager, self).get_query_set().filter(archived=False)
错误为type object 'List' has no attribute 'objects'
答案 0 :(得分:19)
如Django docs中所述:
如果您使用自定义
Manager
个对象,请注意第一个Manager
Django遇到(按照它们在模型中定义的顺序)具有特殊状态。 Django将类中定义的第一个Manager
解释为“默认”Manager
,Django的几个部分将专门用于该模型Manager
。因此,在选择默认管理器时要小心谨慎,以避免覆盖get_query_set()
导致无法检索您想要使用的对象。
因此,就“为什么”而言,允许您提供自己的默认管理器。
解决方案很简单:只需添加此
即可objects = models.Manager()
到您的模型类。
答案 1 :(得分:0)
添加自己的经理会抑制股票经理的创建。