Django 在执行PUT/PATCH时,如何从多对多关系的实例表中删除对象,而不删除实际的对象数据
以下是我的模型:Django 在执行PUT/PATCH时,如何从多对多关系的实例表中删除对象,而不删除实际的对象数据,django,django-models,django-rest-framework,django-views,django-serializer,Django,Django Models,Django Rest Framework,Django Views,Django Serializer,以下是我的模型: class Tag(models.Model): tag = models.CharField(max_length=100,unique=True) class Image(models.Model): name=models.CharField(max_length=40,unique=False) tags = models.ManyToManyField(Tag) 我的序列化程序: class imagesSerializer(QueryFi
class Tag(models.Model):
tag = models.CharField(max_length=100,unique=True)
class Image(models.Model):
name=models.CharField(max_length=40,unique=False)
tags = models.ManyToManyField(Tag)
我的序列化程序:
class imagesSerializer(QueryFieldsMixin,serializers.ModelSerializer):
tags = CreatableSlugRelatedField(
many=True,
queryset=Tag.objects.all(),
slug_field='tag',
required= False
)
class Meta:
model = Image
fields = ('id','name','tags')
def update(self, instance, validated_data):
tags_data = validated_data.pop('tags')
for item in validated_data:
if Image._meta.get_field(item):
setattr(instance, item, validated_data[item])
Tag.objects.filter(image=instance).delete()
for tag_data in tags_data:
instance.tags.delete()
tag_id, created=Tag.objects.get_or_create(tag=tag_data)
instance.tags.add(tag_id)
instance.save()
return instance
现在,迁移后将创建三个表:
1.形象
2.标签
3.图像标签
在更新标记数据时,我的旧标记数据在标记和图像标记表中都被删除。现在我只想从image_tags表中删除该图像的现有标记数据,而不是从tag表中删除
如何使用Django实现这一点?在queryset上调用delete()
会删除queryset中的所有对象,因此instance.tags.delete()
和Tag.objects.filter(image=instance)。delete()
删除所有标记(顺便说一句,您正在多次执行相同的操作)
使用clear()
删除所有关系,或者更好地使用set()
一次性设置整个关系集(查看底部)我尝试过使用set(),但我不知道我无法得到结果,所以我尝试使用clear(),它现在正在工作。。。谢谢