Elimine eficientemente objetos / etiquetas m2m huérfanos en Django
Tengo dos modelos, foto y etiqueta, que se conectan a través de 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)
De vez en cuando, obtenemos etiquetas huérfanas, a las que ya no se hace referencia en ninguna foto. ¿Hay una manera eficiente de eliminar esas etiquetas? Sé de esta respuesta:Django: ¿eliminar las entradas huérfanas M2M?
Y nuestra solución se ve así en este momento:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
Sin embargo, a medida que aumenta la base de datos, el tiempo de ejecución de este script es cada vez más alto :-P ¿Existe una manera eficiente de obtener una lista de todos los identificadores de etiquetas de la tabla de etiquetas y luego una lista de todas las identificaciones de etiquetas tabla para crear una lista de intersecciones?