python - 为什么我不能通过 id 更新嵌套序列化器?

标签 python django api serialization django-rest-framework

当我发送数据时抛出 PUT 请求此 id无法得到这个id在经过验证的数据中。 例如 PUT 请求正文:

{
  "slug": "string",
  "company_id": 1,
  "api_secret": "string",
  "merchant_url_list": [
    { 
      "id": 1
      "merchant_url_type_id": 1,
      "url": "string"
    }
  ]
}

但是在 valid_data {'slug': 'string', 'company': <Company: Company object (1)>, 'api_secret': 'string', 'merchanturl_set': [OrderedDict([('merchant_url_type', <MerchantUrlType: Бот (None)>), ('url', 'string')])]} 中 没有id 。我怎样才能获得ID?

class MerchantUrlSerializer(IdModelSerializer):
    merchant = serializers.PrimaryKeyRelatedField(required=False, read_only=True)

    class Meta:
        model = MerchantUrl
        fields = ('id', 'merchant_url_type', 'merchant', 'url')


class MerchantSerializer(NestedSerializerMixin, IdModelSerializer):
    merchant_url_list = MerchantUrlSerializer(source='merchanturl_set', many=True)

    class Meta:
        model = Merchant
        fields = ('id', 'slug', 'company', 'api_secret', 'merchant_url_list')
{
  "slug": "string",
  "company_id": 0,
  "api_secret": "string",
  "merchant_url_list": [
    {
      "merchant_url_type_id": 0,
      "url": "string"
    }
  ]
}

最佳答案

pk 字段(在您的情况下为 id)默认为 read_only,因为它代表 PK。

如果您想改变该行为,则需要将其设置为读/写:

class MerchantUrlSerializer(IdModelSerializer):
    merchant = serializers.PrimaryKeyRelatedField(required=False, read_only=True)

    class Meta:
        model = MerchantUrl
        fields = ('id', 'merchant_url_type', 'merchant', 'url')
        extra_kwargs = {'id': {'read_only': False}}

关于python - 为什么我不能通过 id 更新嵌套序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59158611/

相关文章:

c++ - 由于函数指针类型定义和具有正确 const 逻辑的分配函数不匹配而产生编译警告

python - 使用 rpy2 将 R 包安装/导入到 python 中,导入/忽略有问题的包

python - 如何使用 libVLC 使 VLC 重复整个播放列表而不是仅当前项目?

javascript - Emacs、Django 模板和脚本 block

api - 如果我知道发件人和收件人邮政编码,如何获取 FedEx 和 UPS 区域编号?

javascript - 如何使用带有 v-for 循环的 vue.js 访问 API 数据

python - 用于 Selenium Scraping 的 Mozilla Firefox 命令行安装

python - web2py 计划任务重新创建(重置)数据库

python - 更改 Django 模型表单中外键的默认占位符

mysql - 如何使用 Django 处理数百个相同的数据库?