Kan*_*ran 1 django django-rest-framework
我有一个自定义用户模型和用户配置文件模型。
class User(AbstractUser):
"""Custom User authentication class to use email as username"""
username = None
email = models.EmailField(verbose_name='email', max_length=255, unique=True,
error_messages={
'unique': _(
"A user is already registered with this email address"),
}, )
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
class UserProfile(models.Model):
user = models.OneToOneField(User, to_field='email', on_delete=models.CASCADE)
emp_id = models.CharField(max_length=20, blank=False, default='0', null=False)
department = models.CharField(max_length=50, blank=True, default='', null=True)
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个序列化器,将这两个模型结合起来,生成一个嵌套的 JSON。
例如:
{
"email":"user@gmail.com",
"is_active":true,
"profile":
{
"emp_id":2,
"department":2
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图做的
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('id', 'user', 'emp_id', 'department')
class UserPairSerializer(serializers.ModelSerializer):
profile = UserProfileSerializer(read_only=True)
class Meta:
model = User
fields = ('id', 'email', 'is_active', 'profile')
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我的回复中既没有该字段profile
,也没有收到任何错误。我尝试遵循此文档:https ://www.django-rest-framework.org/api-guide/relations/
问题是什么?我该如何解决这个问题?
根据隐式引用this 的文档,“反向”查询是使用小写的模型名称(在本例中为 user.userprofile)完成的。
所以你有两个选择:
您可以在模型的字段related_name
上指定自定义。user
UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User, to_field='email', on_delete=models.CASCADE, related_name='profile')
Run Code Online (Sandbox Code Playgroud)
或者,您source
在嵌套序列化器上指定一个参数(请参阅文档):
class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = ('id', 'user', 'emp_id', 'department')
class UserPairSerializer(serializers.ModelSerializer):
profile = UserProfileSerializer(read_only=True, source='userprofile')
class Meta:
model = User
fields = ('id', 'email', 'is_active', 'profile')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1302 次 |
最近记录: |