无法通过外键关系发布数据-Django Rest [英] Unable to POST data with foreign key relationship - Django rest

查看:70
本文介绍了无法通过外键关系发布数据-Django Rest的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的模特:

用户-我使用的是django管理员提供的默认用户

User - I am using the default User provided by 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)

这是我要发布数据的视图

Here is my View where I am trying to post the data

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出现问题.它说:

User gets saved properly. Problem arises with UserProfile only. It says :

Got AttributeError.序列化程序字段的名称可能不正确,并且与 User 实例上的任何属性或键都不匹配.原始异常文本为:用户"对象没有属性用户个人资料".

Got AttributeError when attempting to get a value for field userprofile on serializer CreateUserSerializer. The serializer field might be named incorrectly and not match any attribute or key on the User instance. Original exception text was: 'User' object has no attribute 'userprofile'.

我了解它希望在用户"中使用用户配置文件",但是我必须在CreateUserSerializer中将其删除,以便用户正确保存.现在该怎么办?我是django的新手.

I understand that it expects 'userprofile' inside 'user', but I had to remove it inside CreateUserSerializer for the user to get saved properly. What has to be done now? I am a newbie to django.

推荐答案

您在 UserProfile <-> User 关系上的 related_name t序列化器中的匹配字段.您已经在 ForeignKey 中将'user'设置为相关名称,但是您正在序列化程序中使用 userprofile .更改其中一个以匹配另一个,问题应该得到解决.

Your related_name on UserProfile <-> User relation doesn't match field in serializer. You have 'user' set as a related name in ForeignKey, but you are using userprofile in your serializer. Change either of those to match the other and problem should be fixed.

这篇关于无法通过外键关系发布数据-Django Rest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆