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 docsに記載されているように:

カスタムManagerオブジェクトを使用する場合は、 ManagerDjango が (モデルで定義されている順序で) 最初に遭遇するものには特別なステータスがあることに注意してください。ManagerDjangoはクラスで最初に定義されたものを "default" として解釈し、ManagerDjango のいくつかの部分はそれManagerをそのモデル専用に使用します。get_query_set()そのため、オーバーライドの結果、操作したいオブジェクトを取得できなくなる状況を回避するために、デフォルト マネージャーの選択には注意することをお勧めします。

したがって、「理由」に関する限り、独自のデフォルト マネージャーを提供できるようにするためです。

ただし、解決策は簡単です。これを追加するだけです

objects = models.Manager()

モデルクラスに。

于 2010-12-15T21:58:30.413 に答える
0

独自のマネージャを追加すると、在庫マネージャの作成が抑制されます。

「マネージャーの名前」

于 2010-12-15T21:55:24.330 に答える