Filtre objetos com base na contagem de objetos relacionados e exclua-os! :)

Por exemplo, temos dois modelos:

class Book(models.Model):
title
= models.CharField(max_length = 255, db_index = True)

class Thumb(models.Model):
book
= models.ForeignKey(Book)

E queremos excluir todos os livros, que têm 0 polegares ou 5 polegares ou menos ou igual a 5 polegares, etc …

Primeiro, devemos obter a lista desses objetos.

Obtenha livros com 0 polegar:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__e=0)

Obtenha livros com 5 polegares:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__e=5)

Obtenha livros com menos ou igual a 5 polegares:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__lte=5)

Obtenha livros com 5 polegares maiores ou iguais:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__gte=5)

Obtenha livros com menos de 5 polegares:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__lt=5)

Obtenha livros com mais de 5 polegares:

bad =  Book.objects.annotate(nt=Count('thumb')).filter(nt__gt=5)

Excluir esses objetos é bastante simples:

for item in bad:
item
.delete()