python - Django 嵌套序列化程序问题:字段名称对模型无效
问题描述
我正在尝试设置以下输出:
{
season: 1,
player_profile: {
name: John Doe,
}
}
模型设置如下:
class PlayerProfile(models.Model):
name = models.CharField(max_length=120, null=True)
class TeamAffinityReward(models.Model):
player_profile = models.OneToOneField(
PlayerProfile,
on_delete=models.CASCADE,
#db_constraint=False
null=True)
season = models.IntegerField(null=True, blank=True)
序列化器的设置如下:
class PlayerProfileForNestingSerializer(serializers.ModelSerializer):
class Meta:
model = PlayerProfile
fields = (
'name',
)
class TeamAffinityRewardSerializer(serializers.ModelSerializer):
class Meta:
model = TeamAffinityReward
playerprofile = PlayerProfileForNestingSerializer()
fields = (
'playerprofile',
'season',
)
但是,我收到以下错误:Field name `playerprofile` is not valid for model `TeamAffinityReward`.
如果我更改playerprofile
为player_profile
,错误就会消失,但它会显示 player_profile_ID 而不是 PlayerProfileForNestingSerializer。
解决方案
您正在定义中的player_profile
字段Meta
,您应该将其声明为类变量:
class TeamAffinityRewardSerializer(serializers.ModelSerializer):
player_profile = PlayerProfileForNestingSerializer()
class Meta:
model = TeamAffinityReward
fields = (
'player_profile',
'season',
)
推荐阅读
- r - 如何使用 r 中的 if 条件基于其他列创建新列
- python - 迭代python中所有以前的值
- r - 如何使用非标准评估 NSE 来评估 data.table 上的参数?
- url - 撇号(有效字符)是百分比编码的 - 但只是有时
- java - 每周处理 S3 中的所有文件
- android - 检测软键盘是否打开的简单方法?
- three.js - 使用相机作为背景,同时在 A 帧中显示对象
- keras - 是否可以通过在 Keras 中将 model.compile 中的 loss_weights 设置为零来删除损失函数项?
- c++ - 关于 std::cout,为什么使用“extern”而不是“单例模式”
- mongodb - 为什么在 mongodb 文档中使用 slug 字段?