gpt4 book ai didi

django - 用于用户创建的 DRF 序列化程序嵌套字段

转载 作者:行者123 更新时间:2023-12-05 01:45:55 25 4
gpt4 key购买 nike

所以我有一个自定义模型 - 配置文件,它与 django 用户对象具有 OneToOne 关系。

class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()

我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及“profile_type”属性。

我希望在 POST 请求中将名称简单地指定为“用户名”、“密码”、“电子邮件”等 - 而不是“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 - 用于用户创建的 DRF 序列化程序嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39284436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com