5

我已经为以下模型声明了一个经理,但是在这样做之后,我不能再使用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'

4

2 回答 2

20

Django 文档中所述:

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

因此,就“为什么”而言,它允许您提供自己的默认管理器。

不过,解决方案很简单:只需添加这个

objects = models.Manager()

到你的模型课。

于 2010-12-15T21:58:30.413 回答
0

添加您自己的经理会禁止创建股票经理。

“经理姓名”

于 2010-12-15T21:55:24.330 回答