为什么我不能通过ID更新嵌套的序列化程序?

问题描述 投票:0回答:1

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

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

但是在validated_data {'slug': 'string', 'company': <Company: Company object (1)>, 'api_secret': 'string', 'merchanturl_set': [OrderedDict([('merchant_url_type', <MerchantUrlType: Бот (None)>), ('url', 'string')])]}中没有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"
    }
  ]
}
python django api serialization django-rest-framework
1个回答
1
投票

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}}
© www.soinside.com 2019 - 2024. All rights reserved.