公式のDjango documentationの定義を読んだことがありますが、まだManager
とは混同しています。djangoの "マネージャ"とは何ですか?
文書によれば、データベーステーブル/モデルを操作できるようになっています。しかし、私はまだこれを理解していません。
誰かが私にマネージャーとその役割を説明できますか?例の答えが望ましいでしょう。
公式のDjango documentationの定義を読んだことがありますが、まだManager
とは混同しています。djangoの "マネージャ"とは何ですか?
文書によれば、データベーステーブル/モデルを操作できるようになっています。しかし、私はまだこれを理解していません。
誰かが私にマネージャーとその役割を説明できますか?例の答えが望ましいでしょう。
マネージャは通常、djangoがmodel
コードとデータベースバックエンドの間のインターフェースに使用するdjangoプログラマーから隠されたものです。
あなたはDjangoのORMを照会するとき、あなたはので、この場合には
from my_app.models import MyModel
mms = MyModel.objects.all()
への呼び出しによって、機能のobjects
一部がマネージャによって返されるものですか。あなたがmymodelというを望んでいた場合にのみ、これまで、あなたはマネージャーを作成することができますし、
ので
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()
をあなたのモデルをハック(データベースがあまりにも
red
モデルが含まれる可能性があります)
blue
MyModel
インスタンスを取得し、
MyModel.blue_objects.all()
を呼び出すだけ返しますcolour
のオブジェクトはblue
です。モデルをフィルタリングするのは非常に貧弱な方法です。
通常はマネージャが返すQuerySet
を変更しようとしている場合や、通常のdjangoの「行」レベルではなく「テーブル」レベルのクエリを追加する必要がある場合は、Manager
インターフェイスを変更する必要があります。管理者用のdocumentationは完全であり、いくつかの例があります。
クレジットを追加するには、githubのソースコードを読んでください。 https://github.com/django/django/blob/master/django/db/models/manager.py –
マネージャは、アプリケーションとデータベースの間にある種の「ゲート」です。良いことの一つは、モデルのための独自のベースクエリーセットを定義できるということです。たとえば:
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.objects.filter(available=1)
'あなたがprogrammiに新しいしている場合Managers'は、非常に複雑ジャンゴクラスです:の
isnteadあなたはコードに自信が持てるまで、[チュートリアル](https://docs.djangoproject.com/en/dev/intro/tutorial01/)に固執します。 – danodonovan