用于用户创建的 DRF 序列化程序嵌套字段
DRF Serializer Nested Field for User Creation
所以我有一个自定义模型 - 配置文件,它与 django 用户对象具有 OneToOne 关系。
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()
我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及 "profile_type" 属性。
我希望在 POST 请求中像 "username"、"password"、"email" 等一样简单地指定名称 - 而不是 "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'
我是不是理解错了嵌套字段的语法?还是其他原因?
尝试:
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
所以我有一个自定义模型 - 配置文件,它与 django 用户对象具有 OneToOne 关系。
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()
我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及 "profile_type" 属性。
我希望在 POST 请求中像 "username"、"password"、"email" 等一样简单地指定名称 - 而不是 "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'
我是不是理解错了嵌套字段的语法?还是其他原因?
尝试:
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