如何在 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
请求一起保留的原因。
所以,我有一个看起来像这样的模型。
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
请求一起保留的原因。