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