だから私はほとんどのドキュメントを読んできたので、もう少し調べてみましたが、私の質問に対する答えを見つけることはできません。私はコードから始めます。私が遊んでた間Djangoマネージャの順番はどのような機能ですか?
# 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
を使用し、その後に関連する1つを返すことに気づきました私の質問。私は経営者の順序を切り替える場合は、:
class ModelA(models.Model):
# ...
all_objects = models.Manager()
objects = ActiveManager()
そして、それは、クエリを実行するために、この場合all_objects
には、デフォルトのマネージャーを使用しています。私はこの他の機能がどのような影響を与えるのだろうかと思っています。
編集:私は最初のマネージャがデフォルトのマネージャーになっクラスで見つかったことを理解し、私は特定の機能は、このデフォルトの管理者(のようなget_object_or_404
)を使用していると思いまして
そうですが、私はそれを読んでいましたが、どの特定のものが_default_managerを使用するのか不思議に思っていました。最も一般的なものはおそらく十分でしょう –
@Bryce Siedschlaw、コードの唯一の場所で、モデルの 'objects'属性を参照するDjangoが見つかりました(つまり、動的に渡されたものです。もちろん、' User .objects'、 'Site.objects'など)は[ここ](https://code.djangoproject.com/browser/django/trunk/django/views/generic/create_update.py#L78)です(ただし、関数ベースとにかく一般的なビューは廃止予定です)。特に、ジェネリックビューはデフォルトで '_default_manager'を使用します。 –
あなたは、 '_default_manager'を使用する特定の一般的に使用されている関数を偶然知っているのではないでしょうか? 'get_object_or_404'に似ています。 –