Skutecznie usuwaj osierocone obiekty / znaczniki m2m w Django
Mam dwa modele - Photo i Tag - które są połączone przez 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)
Co jakiś czas otrzymujemy osierocone tagi, do których nie odwołuje się już żadne zdjęcie. Czy istnieje skuteczny sposób usuwania tych tagów? Wiem o tej odpowiedzi:Django: usuń wpisy osierocone M2M?
Nasze rozwiązanie wygląda obecnie tak:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
Jednak wraz ze wzrostem bazy danych środowisko wykonawcze tego skryptu staje się niepokojąco wysokie :-P Czy istnieje skuteczny sposób na uzyskanie listy wszystkich identyfikatorów tagów z tabeli tagów, a następnie listy wszystkich identyfikatorów tagów od wielu do wielu tabela, aby utworzyć listę skrzyżowań?