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



我一直在做一些研究,但找不到一种有效而简单的方法来更新实例,而不生成一些重复的代码。这里有一个例子:

PartySerializer(Model.Serializer(

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

最新更新