Effizientes Löschen von verwaisten m2m-Objekten / Tags in Django
Ich habe zwei Modelle - Foto und Tag - die über ein ManyToManyField verbunden sind.
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)
Von Zeit zu Zeit erhalten wir verwaiste Tags, auf die kein Foto mehr verweist. Gibt es eine effiziente Möglichkeit, diese Tags zu löschen? Ich weiß um diese Antwort:Django: M2M-Waiseneinträge löschen?
Und unsere Lösung sieht im Moment so aus:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
Mit zunehmender Datenbank wird die Laufzeit dieses Skripts jedoch bedrückend hoch: -P Gibt es eine effiziente Möglichkeit, eine Liste aller Tag-IDs aus der Tag-Tabelle abzurufen und anschließend eine Liste aller Tag-IDs aus den vielen zu vielen Tabelle zum Erstellen einer Schnittliste?