我有两个模型Image
和Category
通过m2m关系(在类别中定义)相关。图像可能属于几个类别。 API允许从类别中删除图像。作为回应,我需要在没有类别时删除图像。
我有以下内容:
@receiver(m2m_changed, sender=Category.images.through)
def delete_image_if_has_no_categories(sender, instance, action, reverse,
model, pk_set, **kwargs):
# we only watch reverse signal, because in other cases the images are
# being moved or copied, so don't have to be deleted.
if reverse and action == 'post_remove':
if not instance.categories.exists():
instance.delete()
我已经放置了几个调试日志来检查代码是否正在运行。它运行。但是instance.delete()
之后图像仍保留在数据库中。
我在remove_from_category
内有transaction.atomic
视图,但它没有帮助。
有什么想法吗?
视图在我们的Image模型中调用此方法:
def remove_from_category(self, category_id):
self.categories.remove(category_id)
视图通过REST API调用,如DELETE /category/<catid>/<image-id>
。
images
模型中的Category
字段定义如下:
class Category(MPTTModel):
images = models.ManyToManyField(
'Image',
related_name='categories',
null=True, blank=True,
)
MPTTModel会成为罪魁祸首吗?我使用django-mptt==0.6.0
。
答案 0 :(得分:0)
我猜你可以调用ur方法删除你想要删除的所选项目在pre_clear方法上显示(django总是保存pre_clear中ur m2m字段的最后一个更改,所以如果属性在那里但没有在你post_add上这个obj正在被删除,所以你可以在那里强制触发ur函数