drf关联serializer更新出现的问题
打算给
class AssetsSerializer(serializers.ModelSerializer):
....
class ServerAssetsSerializer(serializers.ModelSerializer):
assets = AssetsSerializer(many=False, required=False)
....
这样的一个serverassets进行一个完整的update,但是由于AssetsSerializer中的asset_nu是一个unique对象,也就是子序列出现unique对象,但对父对象进行更新就可能会报不唯一的错误。
例如:
{
"id": 7,
"assets": {
"id": 8,
"asset_management_ip": "192.168.134.209",
"asset_type": "server",
"asset_nu": "aaaaaaaaaaaaaaaaaaaaaaaaa",
"asset_model": "",
"asset_status": 0,
"asset_environment": 2,
"asset_purchase_day": "2019-12-02",
"asset_expire_day": "2019-12-05",
"asset_usage": "",
"asset_price": "",
"asset_create_time": "2019-12-01T18:02:19.183079+08:00",
"asset_update_time": "2019-12-01T18:02:19.183105+08:00",
"asset_memo": "4564",
"asset_admin": 1,
"asset_provider": null,
"asset_idc": null,
"asset_cabinet": null
},
"server_type": 1,
"username": "sdfds1",
"password": "MYNztfc7XvOQxwDyXpJmZw==",
"port": "2271",
"hostname": null,
"cpu_model": null,
"cpu_number": null,
"vcpu_number": null,
"disk_total": null,
"ram_total": null,
"kernel": null,
"system": null,
"host_vars": null,
"hosted_on": 6
}
报错的原因在于:
这里的serializer_field的instance属性值为None,进而
验证唯一性 的时候就不能排除AssetsSerializer的instance了,导致报错!
正确的做法是,不要用put进行全部更新,如果unique对象更新时候不变就要在ViewSet中,
重写update方法排除掉!