それで、私はほとんどのドキュメントを読み、SOを少し調べてきましたが、私の質問に対する答えを完全に見つけることができません。コードから始めましょう。
# Manager
class ActiveManager(models.Manager):
def get_query_set(self):
return super(ActiveManager, self).get_query_set().filter(is_active=True)
# Model
class ModelA(models.Model):
# ...
is_active = models.BooleanField()
objects = ActiveManager()
all_objects = models.Manager()
そのため、遊んでいるときに、このように記述してget_object_or_404()
を使用するActiveManager
と、最初にすべてのアクティブなレコードを検索してから、クエリに関連するレコードを返すことに気付きました。ただし、マネージャーの順序を入れ替えた場合:
class ModelA(models.Model):
# ...
all_objects = models.Manager()
objects = ActiveManager()
次に、デフォルトのマネージャー(この場合は)を使用all_objects
してクエリを実行します。この変更は他にどのような機能に影響を与えるのでしょうか。
編集:クラスで最初に見つかったマネージャーがデフォルトのマネージャーになることは理解していますが、どの特定の関数がこのデフォルトのマネージャーを使用しているのか疑問に思っています(のようにget_object_or_404
)