【问题标题】:Django rest framework update ManyToManyFieldDjango rest框架更新ManyToManyField
【发布时间】:2021-02-12 09:38:38
【问题描述】:

models.py

class Game(models.Model):
    name = models.CharField(max_length=255)
    gamemodes = models.ManyToManyField(GameMode, related_name='gamemodes', blank=True)

class GameMode(models.Model):
    name = models.CharField(max_length=255)

serializers.py

class GameModeSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        fields = ['pk', 'name']
        model = GameMode

class GameSerializer(serializers.HyperlinkedModelSerializer):
    
    gamemodes = GameModeSerializer(many=True, required=False)

    class Meta:
        model = Game
        fields = ['pk', 'name', 'gamemodes']
     
    def update(self, instance, validated_data):
        print("Validated: ", validated_data)

更新名称与 PATCH 完美配合。但是如何通过 PATCH 请求向其余框架中的 Game 对象添加“游戏模式”?

在序列化程序的更新功能上,当我修补某些东西时它会打印所有值,但是当我提交“游戏模式”时它不会出现在变量 validated_data

最好的

【问题讨论】:

标签: python-3.x django django-rest-framework


【解决方案1】:

使用您当前的序列化程序设置,您需要为gamemodes 提供字典。

{
    "pk": 1,
    "name": "Game 1",
    "gamemodes": [{"pk": 100, "name": "gamemode 100"}]
}

或者,如果您不想使用内部 ID,您也可以添加到您的 GameSerializer 以具有一个只写字段,该字段接受关系 PrimaryKeyRelatedField 或 SlugRelatedField 的 pks。

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2020-05-30
    • 2016-08-09
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多