Elimine com eficiência objetos / tags de m2m órfãos no Django
Eu tenho dois modelos - Foto e Tag - que são conectados através de um 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 em quando, obtemos tags órfãs, que não são mais referenciadas por nenhuma foto. Existe uma maneira eficiente de excluir essas tags? Eu sei sobre esta resposta:Django: excluir entradas órfãs M2M?
E nossa solução se parece com isso no momento:
for tag in Tag.objects.all():
if not tag.photo_set.select_related(): tag.delete()
No entanto, com o aumento do banco de dados, o tempo de execução desse script está se tornando extremamente alto :-P Existe uma maneira eficiente de obter uma lista de todos os IDs de tag da tabela de tags e uma lista de todos os IDs de tags de muitos-para-muitos tabela para criar uma lista de intersecção?