首页 > 解决方案 > 无法使用外键关系发布数据 - Django rest

问题描述

这是我的模型:

用户 - 我正在使用 django admin 提供的默认用户

class UserProfile(models.Model):
    user = models.ForeignKey(User,on_delete=CASCADE,related_name='user')
    phonenumber=models.IntegerField()
    picture=models.CharField(max_length=20,null=True)
    #dp=models.ImageField(upload_to='profile_pics',blank=True)
    points=models.IntegerField(default=0)

    def __str__(self):
        return self.user.name

    def __repr__(self):
        return str(self.user.name)

这是我试图发布数据的视图

class UserCreate(generics.CreateAPIView):
    queryset=User.objects.all()
    serializer_class=None
    def get_serializer_class(self, *args, **kwargs):
        if(self.request.method=='GET'):
            return UserSerializer
        return CreateUserSerializer

    def post(self,request,format=None):

        user=CreateUserSerializer(data=request.data)
        if(user.is_valid()):
            user.save()

这是我的序列化程序

class CreateUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField()
    username = serializers.CharField(max_length=100)
    password = serializers.CharField(max_length=255)
    userprofile = UserProfileSerializer(required=True)
    class Meta:

        fields=('username','password','email','userprofile')
        model=models.User      

    def create(self, validated_data):
        """
        Create and return a new `User` instance, given the validated data.
        """
        userprofile = validated_data.pop('userprofile')
        instance = super(CreateUserSerializer, self).create(validated_data)
        instance.save()
        return instance
                profile=UserProfileSerializer(data=request.data)
            if profile.is_valid():
                profile.save() 
                return Response(user.data, status=201)
            return Response(user.errors, status=400)

class UserProfileSerializer(serializers.ModelSerializer):

    class Meta:

        fields=('phonenumber','picture')
        model=models.UserProfile
    def create(self, validated_data):
        profile = super(UserProfileSerializer,self).create(validated_data)
        profile.save()
        return profile 

用户得到正确保存。问题仅出现在 UserProfile 中。它说 :

userprofile尝试获取序列化程序上的字段值时出现 AttributeError CreateUserSerializer。序列化器字段可能命名不正确,并且与User实例上的任何属性或键都不匹配。原始异常文本是:“用户”对象没有属性“用户配置文件”。

我知道它需要“用户”内的“用户配置文件”,但我必须在 CreateUserSerializer 中将其删除才能正确保存用户。现在必须做什么?我是 django 的新手。

标签: djangodjango-rest-framework

解决方案


您的related_nameon UserProfile<->User关系与序列化程序中的字段不匹配。您已在 中'user'设置为相关名称ForeignKey,但您正在userprofile序列化程序中使用。更改其中任何一个以匹配另一个,问题应该得到解决。


推荐阅读