我々が作成された1関係1に2つの以上のインスタンスを維持したい場合は、ネストされた関係に対処する上で、我々は、カスタムのマネージャクラスを記述することができます。
カスタムマネージャクラスは、主に次の2つの場合に使用されます。
- 1.元のクエリセットを変更、すべての()メソッドをオーバーライド
- 前記方法は、データベースにデータを挿入するように、追加のクラスマネージャを追加します。
次のように管理を調製します:
django.db.models.managerインポートマネージャ クラス:TrackManager(マネージャー) デフcreate_track(自己、validated_data): からモデルトラックをインポート からモデルをインポートアルバム album_data = validated_data.pop(' アルバム' ) アルバム = Album.objects.create( ** album_data) validated_data [ ' アルバム' ] = アルバムの トラック = Track.objects.create(** validated_data) リターントラック デフget_queryset(自己): リターンManager.get_queryset(自己).filter(= is_deleted 偽)
注意:このモデルは法で導入されている必要があり、ヘッドの導入が間違っています。
管理クラスを使用します
図1において、導入model.py
クラストラック(models.Model): アルバム = models.ForeignKey(アルバム、related_name = ' 追跡' ) 順序 = models.IntegerField() タイトル = models.CharField(MAX_LENGTH = 100 ) の期間 = models.IntegerField() is_deleted =モデル。 BooleanField(デフォルト = False)が 生みの親 = models.CharField(max_lengthを= 100、ヌル = TRUE)オブジェクト = managers.TrackManager() クラスのMeta: DB_Tableの =「トラック」
2、serializer.pyは使用しています:
:DEF(自己、validated_data)を作成する トラック = Track.objects.create_track(validated_data) リターントラック