【发布时间】:2018-04-17 17:33:09
【问题描述】:
我已经扩展了用户模型来存储用户配置文件相关信息:
class Profile(models.Model):
user = models.OneToOneField(User, blank=True, on_delete=models.CASCADE, )
name = models.CharField(max_length=50, blank=True, null = True, )
age = models.IntegerField(blank=True, null = True, )
EDUCATION_CHOICES = (
('VOC', 'Vocational'),
('DPL', 'Diploma'),
('BCL', 'Bachelor'),
('MST', 'Master'),
('DOC', 'Doctor'),
)
education = models.CharField(blank=True, null = True, choices=EDUCATION_CHOICES, max_length=3, )
short_story = models.TextField(blank=True, null = True, max_length=500)
ROLE_CHOICES = (
('INT', 'Intern'),
('WOR', 'Worker'),
('SUP', 'Supervisor'),
('MAN', 'Manager'),
)
role = models.CharField(blank=True, null = True, choices=ROLE_CHOICES, max_length=3, )
hobbies = models.TextField(blank=True, null = True, max_length=500)
rational_thinker = models.NullBooleanField(blank=True, null = True, default=False)
welcome_new_changes = models.NullBooleanField(blank=True, null = True, default=False)
embrace_science = models.NullBooleanField(blank=True, null = True, default=False)
if_social = models.NullBooleanField(blank=True, null = True, default=False)
seek_latest_info = models.NullBooleanField(blank=True, null = True, default=False)
exciting_about_job = models.TextField(blank=True, null = True, max_length=500)
not_exciting_about_job = models.TextField(blank=True, null = True, max_length=500)
aspiration = models.TextField(blank=True, null = True, max_length=500)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
它的序列化器:
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = '__all__'
并查看:
@api_view(['GET', 'PUT', 'DELETE'])
def profile(request):
"""
Get, udpate, or delete a specific profile
"""
try:
profile = Profile.objects.get(user=request.user.id)
print(profile)
print(request.data)
except Profile.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = ProfileSerializer(profile)
return Response(serializer.data)
elif request.method == 'PUT':
print('PUT called')
serializer = ProfileSerializer(profile, data=request.data)
if serializer.is_valid():
print('Valid')
serializer.save(user=request.user)
return Response(serializer.data)
else:
print('Else')
return Response(
serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
profile.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
创建用户时会自动创建配置文件。
当我发送部分填充的数据(即某些字段发送为空白)时更新配置文件时,我收到错误请求错误。用户应该只能填写他希望填写的字段,但不能全部填写。如果我用所有数据发出 PUT 请求,那么它是成功的。
为什么会这样?
【问题讨论】:
标签: django django-rest-framework