django - 无法使用外键关系发布数据 - 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 的新手。
解决方案
您的related_name
on UserProfile
<->User
关系与序列化程序中的字段不匹配。您已在 中'user'
设置为相关名称ForeignKey
,但您正在userprofile
序列化程序中使用。更改其中任何一个以匹配另一个,问题应该得到解决。
推荐阅读
- angular - 为什么 IIS 托管 Angular 8 应用程序提供奇怪的 JavaScript 内容?
- android - 如何将 API 中的数据分配给 Android 中的全局变量?
- spring - 每天创建新的 Spring 日志文件
- reactjs - 在移动设备上查看 React 应用程序时遇到问题
- php - 在一组深度嵌套的数组 php 中找到键并返回 true
- python - 在 Django 模型的有序列表中插入元素
- ssl - Wildfly 服务器上的 SSL 证书安装
- c# - 没有建议 TextBox.AutoComplete
- libtool - 使 libtool 使用另一个文件/目录模式
- java - ThreadLocal 和 Supplier 用于静态字段