我有一個2模型。 A
和B
。模型B
有一個外鍵字段,以模型A
,所以在實踐中,A
有一個B
元素的列表。
我將以下數據發佈到Django-REST-Framework API。Django-REST-Framework - 使用元素列表創建元素
{"a_field_1": "value1", "bs": [{"b_field_1": "value1", "b_field_2": "value2"}]}
這是我的串行器:
class BSerializer(serializers.ModelSerializer):
class Meta:
model = B
fields = ('b_field_1', 'b_field_2')
class ASerializer(serializers.ModelSerializer):
bs = BSerializer(many=True)
class Meta:
model = A
fields = ('a_field_1', 'bs')
當我張貼到我的API我得到這個錯誤:
The `.create()` method does not support writable nestedfields by default.
Write an explicit `.create()` method for serializer `app.serializers.ASerializer`, or set `read_only=True` on nested serializer fields.
我發現drf_compound_fields
包,並在ASerializer像裹bs
場所以
bs = ListField(BSerializer(many=True))
這創建了A對象,但未創建組合B元素。 當我改變的字段名b_set
(而不是bs
)我得到了以下錯誤:
TypeError: 'RelatedManager' object is not iterable
什麼是序列化和複合元素的列表創建一個單一的元素的正確方法。