【问题标题】:Django Nested Serializer Issue: Field name is not valid for modelDjango 嵌套序列化程序问题:字段名称对模型无效
【发布时间】:2021-05-23 00:18:13
【问题描述】:

我正在尝试设置以下输出:

{
    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。

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

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

    class TeamAffinityRewardSerializer(serializers.ModelSerializer):
        player_profile = PlayerProfileForNestingSerializer()
    
        class Meta:
            model = TeamAffinityReward
            fields = (
                'player_profile',
                'season',
            )
    

    【讨论】:

    • 啊!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 2017-01-29
    • 2020-12-06
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多