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

时间:2015-04-26 17:22:22

标签: django django-rest-framework

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

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

当序列化该模型时,它返回一个int列表。我只需要在我的序列化程序中追加到int的列表。由于某种原因,解决方案逃脱了我。

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

class MySerializer(serializers.ModelSerializer):

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

这是做什么的,它会保存我传入的新int,但不会附加到已存在的。这是我需要弄清楚的。

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

1 个答案:

答案 0 :(得分:1)

理论中,它完成了这项工作:

# 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请求一起保留。