我正在使用rest框架来序列化我的数据,并且我成功创建了一个类似于下面的序列化程序,但是当我填写表单并发送它时,它会发送但我的数据在没有一个错误的情况下也不会改变!并且空白字段保持空白而没有变化!我该怎么办?
Conditional
strcspn(argv[1], " ");
此文件指定权限级别,因为只有所有者才能编辑对象。
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的子类。
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
答案 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