使用来自validated_data的kwargs的Django Rest Framework update()

gag*_*gro 1 python django django-rest-framework

是否可以在不指定所有实例字段的情况下一行更新实例?

例如:

def update(self, instance, validated_data):
    instance.name = validated_data.get('name', instance.name)
    instance.address = validated_data.get('address', instance.address)
    instance.save()
    return instance
Run Code Online (Sandbox Code Playgroud)

因此,想象一下在名称和地址旁边是否还有更多字段。我可以做些什么从validated_data中提取kwarg吗?就像在create()方法中一样:

def create(self, validated_data):
    return Person.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)

Lin*_*via 5

它不是单线的,而是足够短的(从drf来源中提取):

def update(self, instance, validated_data):
    for attr, value in validated_data.items():
        setattr(instance, attr, value)
    instance.save()
    return instance
Run Code Online (Sandbox Code Playgroud)