如何在 Django-Rest-Framework 中更新 ManyToMany "self"

How to update ManyToMany "self" in Django-Rest-Framework

所以,我有一个看起来像这样的模型。

class MyModel(models.Model):
    similar = models.ManyToManyField("self", null=True, blank=True)

当这个模型被序列化时,它 returns 一个 int 列表。我只需要在我的序列化程序中附加到那个 int 列表。出于某种原因,解决方案使我不知所措。

我需要追加到列表的序列化程序的更新方法如下所示。

class MySerializer(serializers.ModelSerializer):

    def update(self, instance, validated_data):
        instance.similar = validated_data.get('similar', instance.similar)

这是做什么的,它会很好地保存我传入的新整数,但不会附加到已经存在的内容上。这就是我需要弄清楚的。

感谢任何可以提供帮助的人。

理论中,这就是工作:

# Disclaimer: anti-pattern
def update(self, instance, validated_data):
    added = validated_data.get('similar', None)
    if added:
        instance.similar.add(*added)
    return instance

这种逻辑的问题是,现在不再可能从 manytomany 关系中删除项目 PUT 请求。

这就是为什么在大多数情况下最好 发送所有 IDs 应该与每个 PUT 请求一起保留的原因。