Эффективно удалить осиротевшие объекты / теги m2m в Django
У меня есть две модели - Photo и Tag - которые связаны через 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 Есть ли эффективный способ получить список всех идентификаторов тегов из таблицы тегов, а затем список всех идентификаторов тегов из «многие ко многим»? таблица для создания списка пересечений?