无法发布具有外键关系的数据-Django rest

时间:2019-03-03 00:45:01

标签: django django-rest-framework

这是我的模特:

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

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上获取字段CreateUserSerializer的值时出现AttributeError。 序列化程序字段的名称可能不正确,并且与User实例上的任何属性或键都不匹配。 原始异常文本为:“用户”对象没有属性“用户个人资料”。

我了解它希望在“用户”中使用“用户配置文件”,但是我必须在CreateUserSerializer中将其删除,以便用户正确保存。现在必须做什么?我是django的新手。

1 个答案:

答案 0 :(得分:0)

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