我有两个模型 - 照片和标签 - 通过 ManyToManyField 连接。
class Photo(models.Model):
tags = models.ManyToManyField(Tag)
class Tag(models.Model):
lang = models.CharField(max_length=2)
name_es = models.CharField(max_length=40)
name_en = models.CharField(max_length=40)
每隔一段时间,我们就会得到孤立的标签,这些标签不再被任何照片引用。有没有有效的方法来删除这些标签?我知道这个答案:Django:删除 M2M 孤立条目?
目前我们的解决方案如下所示:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
然而,随着数据库的增加,这个脚本的运行时间变得令人痛苦地高:-P 有没有一种有效的方法从标签表中获取所有标签 ID 的列表,然后从多对多中获取所有标签 ID 的列表表创建交集列表?
尝试使用/中间表进行子查询
qs = Tag.objects.exclude(pk__in=Book.tags.through.objects.values('tag'))
# then you could
qs.delete()
# or if you need to trigger signal per item
for x in qs:
x.delete()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)