Django 嵌套序列化程序问题:字段名称对模型无效
Django Nested Serializer Issue: Field name is not valid for model
我正在尝试设置以下输出:
{
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。
您正在 Meta
中定义 player_profile
字段,您应该将其声明为 class 变量:
class TeamAffinityRewardSerializer(serializers.ModelSerializer):
player_profile = PlayerProfileForNestingSerializer()
class Meta:
model = TeamAffinityReward
fields = (
'player_profile',
'season',
)
我正在尝试设置以下输出:
{
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。
您正在 Meta
中定义 player_profile
字段,您应该将其声明为 class 变量:
class TeamAffinityRewardSerializer(serializers.ModelSerializer):
player_profile = PlayerProfileForNestingSerializer()
class Meta:
model = TeamAffinityReward
fields = (
'player_profile',
'season',
)