gpt4 book ai didi

python - 如何有效地更新 Django Serializer 中的嵌套对象

转载 作者:行者123 更新时间:2023-12-04 07:51:39 25 4
gpt4 key购买 nike

我一直在做一些研究,但找不到一种有效而简单的方法来更新实例而不编写一些重复的代码。下面是一个例子:
PartySerializer(Model.serializers)

def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.event_date = validated_data.get('event_date', instance.event_date)
instance.time_start = validated_data.get('time_start', instance.time_start)
instance.time_end = validated_data.get('time_end', instance.time_end)
instance.main_color = validated_data.get('main_color', instance.main_color)
instance.is_age_limited = validated_data.get('is_age_limited', instance.is_age_limited)
instance.is_open_bar = validated_data.get('is_open_bar', instance.is_open_bar)
instance.is_open_food = validated_data.get('is_open_food', instance.is_open_food)
instance.description = validated_data.get('description', instance.description)
instance.location = validated_data.get('location', instance.location)
instance.category = validated_data.get('category', instance.category)
instance.save()
有没有更清洁、更有效的方法?

最佳答案

伙计们,我终于找到了更好的方法。 @Neeraj 因为我使用嵌套对象,所以我需要为方法更新指定覆盖。因此,当我使用 super() 时,我最终调用了我所在的相同函数。@VJ Magar 在这种情况下,我没有进行部分更新,所有字段至少都存在其键。我的解决方案是这样的:

def update(self, instance, validated_data):
for key, obj in validated_data.items():
if not key == 'location':
setattr(instance, key, obj)
else:
location_serializer = LocationSerializer(instance.location, data=validated_data.get('location'))
if location_serializer.is_valid():
location_serializer.save()
instance.save()
return instance

关于python - 如何有效地更新 Django Serializer 中的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66938758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com