Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在执行PUT/PATCH时,如何从多对多关系的实例表中删除对象,而不删除实际的对象数据_Django_Django Models_Django Rest Framework_Django Views_Django Serializer - Fatal编程技术网

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(),它现在正在工作。。。谢谢