我想使用rest_framework扩展我的Django用户模型,为项目创建一个api端点,但是我得到了一个KeyError: user,下面是我的代码。
配置文件apiView
class ProfileListView(generics.ListCreateAPIView):
permission_classes = (IsAuthenticatedOrReadOnly,)
queryset = Profile.objects.all()
serializer_class = ProfileSerializer配置文件序列化程序
class ProfileSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source = 'pk', read_only = True)
username = serializers.CharField(source = 'user.username', read_only = True)
email = serializers.CharField(source = 'user.email', read_only=True)
class Meta:
model = Profile
fields = ('id', 'email', 'username', 'qualification', 'profession', 'phoneNumber',
'city', 'address', 'surname', 'firstName', 'dp', 'yearOfExperience',
'gender'
)
def create(self, validated_data, instance=None):
user_data = validated_data.pop('user')
user = CustomUser.objects._create_user(**validated_data)
Profile.objects.create(user=user, **user)
return user配置文件模型
class Profile(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
firstName = models.CharField(max_length=255, blank=True, null=True)
surname = models.CharField(max_length=255, blank=True, null=True)
yearOfExperience = models.PositiveIntegerField(default=1)
profession = models.CharField(max_length=250, blank=True, null=True)
dp = models.URLField(blank=True, null=True)
qualification = models.CharField(max_length=255, blank=True, null=True)
phoneNumber = models.CharField(max_length=255, blank=True, null=True)
city = models.CharField(max_length=255, blank=True, null=True)
address = models.CharField(max_length=255, blank=True, null=True)
gender = models.CharField(max_length=255, choices=GENDER)
class Meta:
ordering = ('surname', '-firstName', )
verbose_name = 'Profile'
verbose_name_plural = 'Profiles'
def __str__(self):
return self.user.username
@receiver(post_save, sender=CustomUser)
def create_user_profile(sender, instance=None, created=False, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()错误消息:
File "/home/olaneat/Desktop/filez/project/django/funzone/lib/python3.7/site-packages
user_data = validated_data.pop('user')
KeyError: 'user'发布于 2020-07-31 06:18:47
在访问之前需要检查用户是否在那里;
def create(self, validated_data, instance=None):
if 'user' in validated_data:
user_data = validated_data.pop('user')
user = CustomUser.objects._create_user(**validated_data)
Profile.objects.create(user=user, **user)
return user但是,您永远不需要执行该validated_data.pop(),因为在分配user_data之后,您将不再使用它。
https://stackoverflow.com/questions/63182102
复制相似问题