代码之家  ›  专栏  ›  技术社区  ›  JeremyE

Django嵌套序列化程序问题:字段名对模型无效

  •  0
  • JeremyE  · 技术社区  · 4 年前

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

    {
        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 ,错误消失了,但它显示的是playerprofile_ID,而不是PlayerProfileForNestingSerializer。

    0 回复  |  直到 4 年前
        1
  •  2
  •   Ersain    4 年前

    您正在定义 player_profile 场在 Meta ,您应该将其声明为类变量:

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