[英]Django Rest Framework: Create / Update by id, output dictionary
我有一个 django-rest-framework model 视图集(用于测试),它使用这样的序列化:
class ProcessSerializer(serializers.Serializer):
class Meta:
model = Process.draft_model
fields = ['id', 'name']
class TestSerializer(serializers.ModelSerializer):
process = ProcessSerializer()
class Meta:
model = ConfigurationTest
fields = [
'id',
'name',
'process',
]
这在检索测试时效果很好,但不适用于创建/更新,理想情况下我希望只向 ID 提供这样的请求:
{
process: 1
name: 'A new test'
}
将该请求发送到服务器时,我收到类似Invalid data. Expected a dictionary, but got int
Invalid data. Expected a dictionary, but got int
我尝试了什么:
process
和process_id
作为包含字段,并在 POST 请求中发送process_id
。 在这种情况下,我收到一个错误,例如process_id cannot be null
,这很容易混淆。create
操作使用不同的序列化程序,它将process
用作普通的 PrimaryKeyRelatedField,而没有嵌套的序列化程序。 这对于获取请求非常有效,但显然也意味着服务器对该 POST 请求的响应不包括嵌套良好的序列化程序。参考型号
class ConfigurationTest(...):
name = CharField(max_length=120)
process = ForeignKey(Process)
class Process(...):
name = CharField(max_length=120)
我会给一个这样的序列化程序。 一个用于 read_only 的序列化器字段,其中它使用 ProcessSerializer 和用于 write_only 的 process_id 作为 integer。
class TestSerializer(serializers.ModelSerializer):
process = ProcessSerializer(read_only=True)
process_id = IntegerField(write_only=True)
class Meta:
model = ConfigurationTest
fields = [
'id',
'name',
'process',
'process_id',
]
并发布:
{
process_id: 1
name: 'A new test'
}
我不是 100% 确定您不需要覆盖创建/更新,但这应该可以正常工作。
注意:我看到你尝试了类似逻辑的东西。 但它是相同的代码吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.