djangoのドキュメントで、through引数を使用して仲介者として動作するモデルを指すM2M関係について説明します。django-restでのM2M関係の操作方法
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person,
through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
class Meta:
ordering = ['date_joined']
、私は各グループ内でも、すべての人が含まれているグループモデルの読み書きビュー休息を持つようにしたい今想定date_joinedフィールド順。私が取得したいJSONシリアライズは、(メンバーだけ自分のIDと説明されている)以下の通りです:読み取り操作のために、それがうまく動作しますが、それを
class GroupSerializer(serializers.ModelSerializer):
members = serializers.SlugRelatedField(source='membership_set',
many=True,
read_only=False,
slug_field='person_id',
required=True)
class Meta:
model = Group
fields = ('id', 'name', 'members')
:
{
"id": 1,
"name": "U2",
"members": [
20,
269,
134,
12,
]
}
私は、シリアライザを書きました書いてはいけません。上記で定義された直列化与えられ、それがで進める、となるよう、私はシリアライザを定義する必要があります方法:
- グループオブジェクト
- (メンバーオブジェクトを作成することによって)グループに各メンバーを追加します
あなたが私に与えた明確な答えを、ありがとう、ドキュメントの関連部分へのリンクまたはその点に関する著者の答えに感謝します。私がしようとしていることは、フレームワークによってあまりサポートされていません。あなた自身でコードを書いてこの作業を達成する方法を提案してください。正しい方法は何ですか?ありがとうございました! – Dragster
私は助けることができてうれしい:)作成部分については、** post/create **メソッドまたは** post_save **メソッドの2つの場所で行うことができます。 ** post_save **で行うことをお勧めします。これは、フレームワークにGroupオブジェクトの作成を許可していることを意味し、メンバーの追加だけです。このメソッドの使い方については、小さなコードスニペットで回答を編集します。 – AdelaN
ありがとう、あなたのサポートは非常に高く評価されています! – Dragster