cod*_*gle 2 django django-models django-authentication django-serializer django-rest-framework
所以我有一个自定义模型 - Profile,它与 django User 对象具有 OneToOne 关系。
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()
Run Code Online (Sandbox Code Playgroud)
我想制作一个 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
Run Code Online (Sandbox Code Playgroud)
但是 - 我遇到了一个错误:
ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile'
Run Code Online (Sandbox Code Playgroud)
我是否得到了嵌套字段的语法错误?或者是别的什么?
尝试:
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
Run Code Online (Sandbox Code Playgroud)
并检查了 该为可写嵌套的序列化。
处理嵌套对象:检查这个
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |