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
}

报错的原因在于:

drf关联serializer更新出现的问题

这里的serializer_field的instance属性值为None,进而

drf关联serializer更新出现的问题

验证唯一性 的时候就不能排除AssetsSerializer的instance了,导致报错!

正确的做法是,不要用put进行全部更新,如果unique对象更新时候不变就要在ViewSet中,

drf关联serializer更新出现的问题

重写update方法排除掉!