所以我有一个自定义模型 - Profile,它与django User对象具有OneToOne关系。
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()
我想创建一个django rest框架序列化器,它允许创建和创建User对象的嵌套属性以及" profile_type"属性。
我希望在POST请求中指定名称,只需"用户名","密码","电子邮件"等等 - 而不是& #34; profile_username"," profile_password",...
到目前为止我已经
了class ProfileSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='profile_user_username')
password = serializers.CharField(source='profile_user_password')
email = serializers.CharField(source='profile_user_email')
class Meta:
model = Profile
fields = ('id',
'profile_user_username', 'profile_user_password', 'profile_user_email',
'username',
'password',
'email')
depth = 2
但是 - 我一直在收到错误:
ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile'
我是否弄错了嵌套字段的语法?还是别的什么?
答案 0 :(得分:3)
尝试:
class User(models.Model):
username = models.CharField()
password = models.CharField()
email = models.CharField()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
class ProfileSerializer(serializers.ModelSerializer):
user = UserSerializer(many=True)
class Meta:
model = Profile
fields = ('user', 'profile_type',)
def create(self, validated_data):
user_data = validated_data.pop('user')
user = User.objects.create(**user_data)
profile = Profile.objects.create(user=user, **validated_data)
return profile
并退房 this用于可写嵌套序列化程序。
用于处理嵌套对象: 结帐this