Django rest framework DRF serializer方法字段在update()方法中更新后返回以前的字段数据
我有一个序列化程序,需要在其中更新相关模型,并使用serializer方法字段返回更新后的值Django rest framework DRF serializer方法字段在update()方法中更新后返回以前的字段数据,django-rest-framework,Django Rest Framework,我有一个序列化程序,需要在其中更新相关模型,并使用serializer方法字段返回更新后的值 class MultiUserSerializer(serializers.ModelSerializer): shared_user = UserBaseSerializer(required=False) enforce_mfa = serializers.SerializerMethodField(default=False, required=False) c
class MultiUserSerializer(serializers.ModelSerializer):
shared_user = UserBaseSerializer(required=False)
enforce_mfa = serializers.SerializerMethodField(default=False, required=False)
class Meta:
model = MultiUser
depth = 1
fields = [
'shared_user',
'enforce_mfa',
]
def update(self, instance, validated_data):
if self.context['request'].data.get('enforce_mfa'):
# Say enforce_mfa = True
enforce_mfa = json.loads(str(self.context['request'].data.get('enforce_mfa')).lower())
preference, create = Preference.objects.get_or_create(user=instance.shared_user)
preference.enforce_mfa = enforce_mfa
preference.save()
print('This prints True: {}'.format(preference.enforce_mfa))
instance_ = super().update(instance, validated_data)
return instance_
def get_enforce_mfa(self, obj):
try:
a = obj.shared_user.preference.enforce_mfa
print('This remains False {}'.format(a))
return a
except ObjectDoesNotExist:
return False # Return False in case of preference does not exist.
更新update()
方法中的首选项模型后,该值已成功更新,但从get\u emforce\u mfa()
方法返回的值仍然是以前的值
假设enforce_-mfa
的上一个值为False,并且该值更新为True,则它仍然会从get_-enforce_-mfa()
方法返回False。使用refresh_from_-db()
:
def get_-exforce_-mfa(self,obj):
尝试:
首选项=对象共享\用户首选项
首选项。从_db()刷新_
return preference.unforcemfa
除ObjectDoesNotExist外:
return False#如果首选项不存在,则返回False。
这是文档您是否尝试过使用执行更新
而不是更新
?可以添加在保存对象之前或之后发生的行为。