无法通过外键关系发布数据-Django Rest [英] Unable to POST data with foreign key relationship - 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屋!