所以,我有一个看起来像这样的模型。
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,但不会附加到已存在的。这是我需要弄清楚的。
感谢任何可以提供帮助的人。
答案 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
请求一起保留。