DRF 序列化程序在更新时清空 OrderedDict()
DRF Serializer empty OrderedDict on update()
我正在使用 Django 2.x 和 Django REST Framework
class ComponentDataSerializer(serializers.ModelSerializer):
class Meta:
model = ComponentData
fields = [
'id',
'analytics_type'
]
class ComponentSerializer(serializers.ModelSerializer):
data = ComponentDataSerializer(many=True)
class Meta:
model = Component
fields = [
'id',
'name',
'group',
'data',
]
def validate(self, attrs):
print('validate data: {}'.format(attrs))
return attrs
通过POST
请求,validate()
中的attrs
是
validate data: OrderedDict([('name', 'Component Test'), ('group', <AnalyticsGroup: Chart>), ('data', [OrderedDict([('analytics_type', <AnalyticsType: Bar Chart>)])])])
在 PATCH
请求时,data
属性为空 OrderedDict
validate data: OrderedDict([('group', <AnalyticsGroup: Chart>), ('data', [OrderedDict()])])
每个请求中的数据负载是相同的。
name: "Component Test"
group: "2"
data[0]analytics_type: "3"
data[0]analytics_sub_type: "2"
data[0]query: "9"
其中每个字段 analytics_type
、analytics_sub_type
和 query
的值分别是 pk
。
对于那些陷入类似情况的人,带有嵌套序列化程序的 PATCH
方法适用于 JSON
数据,而不适用于表单数据。
我传递了 JSON
数据而不是来自邮递员的表单数据,它正在工作。
我正在使用 Django 2.x 和 Django REST Framework
class ComponentDataSerializer(serializers.ModelSerializer):
class Meta:
model = ComponentData
fields = [
'id',
'analytics_type'
]
class ComponentSerializer(serializers.ModelSerializer):
data = ComponentDataSerializer(many=True)
class Meta:
model = Component
fields = [
'id',
'name',
'group',
'data',
]
def validate(self, attrs):
print('validate data: {}'.format(attrs))
return attrs
通过POST
请求,validate()
中的attrs
是
validate data: OrderedDict([('name', 'Component Test'), ('group', <AnalyticsGroup: Chart>), ('data', [OrderedDict([('analytics_type', <AnalyticsType: Bar Chart>)])])])
在 PATCH
请求时,data
属性为空 OrderedDict
validate data: OrderedDict([('group', <AnalyticsGroup: Chart>), ('data', [OrderedDict()])])
每个请求中的数据负载是相同的。
name: "Component Test"
group: "2"
data[0]analytics_type: "3"
data[0]analytics_sub_type: "2"
data[0]query: "9"
其中每个字段 analytics_type
、analytics_sub_type
和 query
的值分别是 pk
。
对于那些陷入类似情况的人,带有嵌套序列化程序的 PATCH
方法适用于 JSON
数据,而不适用于表单数据。
我传递了 JSON
数据而不是来自邮递员的表单数据,它正在工作。