25

Django の公式ドキュメントの定義を読みましたが、 a が何をするのかまだ混乱してManagerいます。

ドキュメントには、データベースのテーブル/モデルを操作できると書かれていますが、私はまだこれを理解していません。

誰かマネージャーとその役割を説明してもらえますか? 例を挙げた回答が望ましいでしょう。

4

3 に答える 3

28

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管理者向けのドキュメントは非常に完全で、いくつかの例が含まれています。

于 2013-02-04T14:57:43.247 に答える
10

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)
于 2013-02-04T15:02:27.790 に答える