Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework DRF serializer方法字段在update()方法中更新后返回以前的字段数据_Django Rest Framework - Fatal编程技术网

Django rest framework DRF serializer方法字段在update()方法中更新后返回以前的字段数据

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

我有一个序列化程序,需要在其中更新相关模型,并使用serializer方法字段返回更新后的值

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。

这是文档

您是否尝试过使用
执行更新
而不是
更新
?可以添加在保存对象之前或之后发生的行为。