【发布时间】:2021-07-14 16:59:55
【问题描述】:
我有一个序列化器,我需要在其中更新相关模型并使用序列化器方法字段返回更新后的值。
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()方法内更新Preference模型后,值更新成功,但get_enforce_mfa()方法返回的值还是之前的值。
说如果enforce_mfa之前的值是False,并且该值更新为True,它仍然返回False get_enforce_mfa() 方法。
【问题讨论】:
-
您是否尝试过使用
perform_update而不是update?您可以添加在保存对象之前或之后发生的行为。