0
私は3つのモデルを持っています。そのうちの1つは、他の2つをリンクする中間モデルです。私はこれらの2つのモデルを外部キーの関係で適切にネストすることができますが、この中間モデルを使用して一緒にリンクさせたいと思います。下部に希望の出力。Django Rest Framework - 中間モデルによるネストされた直列化
models.py
class Parent(models.Model):
first_name = models.CharField(max_length=128)
last_name = models.CharField(max_length=128)
class Child(models.Model):
given_name = models.CharField(max_length=128)
# reverse relation works, but an intermediary model is preferred
# parent = models.ForeignKey(Parent, related_name="parents" on_delete=models.PROTECT)
class Link(models.Model):
parent = models.ForeignKey(Parent, on_delete=models.PROTECT)
child = models.ForeignKey(Child, on_delete=models.PROTECT)
serializers.py
class ChildSerializer(serializers.ModelSerializer):
class Meta:
model = Child
fields = '__all__'
class LinkSerializer(serializers.ModelSerializer):
# what should I place here?
class Meta:
model = Link
fields = '__all__'
class ParentSerializer(serializers.ModelSerializer):
children = LinkSerializer(many=True)
class Meta:
model = Parent
fields = ('id', 'first_name', 'last_name', 'children')
api_output.json
{
"id": 1,
"first_name": "John",
"last_name": "Appleseed",
"children": [
{
"id": 1,
"given_name": "Uno Appleseed"
},
{
"id": 2,
"given_name": "Dos Appleseed"
}
]
}
が、それは、このソリューションで各モデルフィールドの1つのシリアライザフィールドを作成するために必要ですか?つまり、 'children = ChildSerializer(source =" * "、many = True)'のような方法がありますか?すべての列を表示したいときは扱いにくいです。 – Nogurenn
@Nogurennはい、各フィールドを別々に定義する必要があります。別の方法として、http://www.django-rest-framework.org/api-guide/fields/#serializermethodfieldでParentSerializerをカスタマイズしてみることもできます – neverwalkaloner