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

5
задан Community 23 May 2017 в 12:02
поделиться