首页 > 解决方案 > 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`.

如果我更改playerprofileplayer_profile,错误就会消失,但它会显示 player_profile_ID 而不是 PlayerProfileForNestingSerializer。

标签: pythondjangoserializationdjango-rest-framework

解决方案


您正在定义中的player_profile字段Meta,您应该将其声明为类变量:

class TeamAffinityRewardSerializer(serializers.ModelSerializer):
    player_profile = PlayerProfileForNestingSerializer()

    class Meta:
        model = TeamAffinityReward
        fields = (
            'player_profile',
            'season',
        )

推荐阅读