【发布时间】:2020-01-20 05:54:24
【问题描述】:
我正在尝试使用 Django Rest 框架创建一个嵌套序列化程序。关系是 Profile X 用户,但是当我使用 Profile.objects.create(user=profile, **user_data) 时,我得到 ValueError: Cannot assign "<Profile: Profile object (7)>": "Profile.user" must be a "User" instance.。
这应该是对模型关系定义或序列化程序声明本身的一些新手误解,但我在文档周围找不到任何东西。如果有人能给我指个方向,我会很优雅。
models.py
class User(models.Model):
name = models.CharField(max_length=100, blank=False)
email = models.CharField(max_length=100, blank=True, default='')
password = models.CharField(max_length=100, blank=True, default='')
timestamp = models.DateTimeField(default= timezone.now)
class Meta:
ordering = ['timestamp']
class Profile(models.Model):
# choices [...]
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
profile_type = models.CharField(max_length=2,choices=PROFILE_CHOICES,default=TEAMMEMBER)
authentication_token = models.CharField(max_length=100, null=True)
avatar_url = models.CharField(max_length=100, default='')
permissions = models.CharField(max_length=100, null=True)
timestamp = models.DateTimeField(default= timezone.now)
class Meta:
ordering = ['timestamp']
serializer.py
class UserSerlializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['name', 'email', 'password']
class ProfileSerializer(serializers.ModelSerializer):
user = UserSerlializer()
class Meta:
model = Profile
fields = ['user', 'profile_type']
def create(self, validated_data):
user_data = validated_data.pop('user')
profile = Profile.objects.create(**validated_data)
Profile.objects.create(user=profile, **user_data)
return Profile
发布
{
"profile_type" : "ST",
"user": {
"name" : "test",
"email" : "test@test.com",
"password" : "123456"
}
}
【问题讨论】:
-
似乎问题就在这里。
Profile.objects.create(user=profile, **user_data)。您正在将profile对象分配给Profile.user。它必须是User对象。
标签: python django django-rest-framework