首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyError:'user‘

KeyError:'user‘
EN

Stack Overflow用户
提问于 2020-07-31 06:10:20
回答 1查看 234关注 0票数 0

我想使用rest_framework扩展我的Django用户模型,为项目创建一个api端点,但是我得到了一个KeyError: user,下面是我的代码。

配置文件apiView

代码语言:javascript
复制
class ProfileListView(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticatedOrReadOnly,)
    queryset =  Profile.objects.all()
    serializer_class = ProfileSerializer

配置文件序列化程序

代码语言:javascript
复制
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

配置文件模型

代码语言:javascript
复制
 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()

错误消息:

代码语言:javascript
复制
  File "/home/olaneat/Desktop/filez/project/django/funzone/lib/python3.7/site-packages
    user_data = validated_data.pop('user')
KeyError: 'user'
EN

回答 1

Stack Overflow用户

发布于 2020-07-31 06:18:47

在访问之前需要检查用户是否在那里;

代码语言:javascript
复制
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之后,您将不再使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63182102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档