我有一个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
什么是序列化和复合元素的列表创建一个单一的元素的正确方法。