REST框架放置数据但不会更改它们

时间:2015-09-04 05:06:52

标签: python django rest serialization django-rest-framework

我正在使用rest框架来序列化我的数据,并且我成功创建了一个类似于下面的序列化程序,但是当我填写表单并发送它时,它会发送但我的数据在没有一个错误的情况下也不会改变!并且空白字段保持空白而没有变化!我该怎么办?

enter image description here

Serializer.py:

Conditional

Views.py:

strcspn(argv[1], " ");

Permission.py:

此文件指定权限级别,因为只有所有者才能编辑对象。

class UserProfileSignUpSerializer(serializers.ModelSerializer):
    verification_code = serializers.ReadOnlyField(read_only=True)

    class Meta:
        model = UserProfile
        fields = ['id', 'gender', 'birthday', 'country', 'city', 'street_address', 'state', 'about', 'social_links',
                  'location', 'avatar', 'verification_code']


class UserSignUpSerializer(serializers.ModelSerializer):
    user_profile = UserProfileSignUpSerializer()

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'user_profile')

    def update(self, instance, validated_data):
        user_profile_data = validated_data.pop('user_profile')
        for attr, value in user_profile_data.items():
            setattr(instance, attr, value)
        for attr, value in validated_data.items():
            setattr(instance.user_profile, attr, value)
        # UserProfile.objects.create(user=instance, **user_profile_data)
        instance.save()
        instance.user_profile.save()
        return instance

我这里有一个模型,Profile,其中存在多个对象和一对一的字段,对应于auth.User;和一个名为Userprofile的子类。

Model.py

class UserSignupDetail(generics.RetrieveUpdateAPIView):
    serializer_class = UserSignUpSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly,)

    def get_queryset(self):
        pk = self.kwargs['pk']
        signup = User.objects.filter(pk=pk)
        return signup

2 个答案:

答案 0 :(得分:0)

您是否已尝试使用“POST”。还要确保表单没有使用旧数据缓存,我自己也遇到过这个问题。

答案 1 :(得分:0)

我将serializer.py更改为以下内容并且工作正常:

class UserSignUpSerializer(serializers.ModelSerializer):
    user_profile = UserProfileSignUpSerializer()

    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'user_profile')

    def update(self, instance, validated_data):
        user_profile_data = validated_data.pop('user_profile')

        for attr, value in validated_data.items():
            setattr(instance, attr, value)

        instance.save()
        try:
            UserProfile.objects.get(user=instance)
            for attr, value in user_profile_data.items():
                setattr(instance.user_profile, attr, value)
        except ObjectDoesNotExist:
            UserProfile.objects.create(user=instance, **user_profile_data)
        instance.user_profile.save()
        return instance