Django の公式ドキュメントの定義を読みましたが、 a が何をするのかまだ混乱してManager
います。
ドキュメントには、データベースのテーブル/モデルを操作できると書かれていますが、私はまだこれを理解していません。
誰かマネージャーとその役割を説明してもらえますか? 例を挙げた回答が望ましいでしょう。
model
マネージャーは通常、djangoがコードとデータベースバックエンド間のインターフェイスに使用するdjangoプログラマーから隠されたものです。
django ORMにクエリを実行するときは、
from my_app.models import MyModel
mms = MyModel.objects.all()
この場合、objects
関数の一部はマネージャーによって返されるものです。MyModelにblue
MyModel
インスタンスのみを取得させたい場合(データベースにはred
モデルも含まれている可能性があります)、マネージャーを作成してモデルをハックすることができます。
class BlueManager(models.Manager):
def get_query_set(self):
return super(BlueManager, self).get_query_set().filter(colour='Blue')
class MyModel(models.Model):
colour = models.CharField(max_length=64)
blue_objects = BlueManager()
と呼び出し
MyModel.blue_objects.all()
colour
としてのみオブジェクトを返しますblue
。これはモデルをフィルタリングするための非常に貧弱な方法であることに注意してください!
通常、マネージャーが返すsを変更する場合、または(通常のdjangoの「行」レベルではなく)「テーブル」レベルのクエリを追加する必要があるManager
場合は、インターフェイスを変更する必要があります。QuerySet
管理者向けのドキュメントは非常に完全で、いくつかの例が含まれています。
Manager は、アプリケーションとデータベースの間のある種の「ゲート」です。良い点の 1 つは、モデルのベース クエリセットを独自に定義できることです。例: 'availability' フィールドを持つモデル 'Book' がある場合、特定の種類の可用性タイプをフィルタリングする独自のクエリセットを準備できます。
models.py:
class AvailableBookManager(models.Manager):
def get_query_set(self):
return super(AvailableBookManager, self).get_query_set().filter(availability=1)
class Book(models.Model):
(...)#fields definition
objects = models.Manager() #default manager
available_objects = AvailableBookManager() #own manager
そして今、あなたはこのように使うことができます:
books = Book.available_objects.all()
使用する代わりに:
books = Book.objects.filter(available=1)