Django Rest框架:按id创建/更新,输出字典

2024-10-01 00:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django rest framework模型视图集(用于测试),它使用如下序列化:

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的错误

我的尝试:

  • processprocess_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)

Tags: name程序idfieldsmodel序列化错误情况
1条回答
网友
1楼 · 发布于 2024-10-01 00:27:59

我会给一个像这样的序列化程序。只读的一个序列化程序字段,其中它将ProcessSerializer和ProcessID用作整型

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%确定您不需要覆盖创建/更新,但这应该可以正常工作

注意: 我知道你尝试过类似的逻辑。但代码是一样的吗

相关问题 更多 >