Удаление дубликатов в модели Django

Например, у нас есть модель такого вида:

class Email(models.Model):
    email = models.CharField(max_length=50)

И мы хотим удалить дубликаты объектов этой модели. Для этого делаем следующее.

Выбираем список значений поля email без повторов и перебираем его.
Далее перебираем все элементы, у которых количество одинаковых email больше одного и удаляем лишнее. При необходимости можно добавить сортировку.

for email in Email.objects.values_list('email', flat=True).distinct():
    Email.objects.filter(pk__in=Email.objects.filter(email=email).values_list('id', flat=True)[1:]).delete()

Обратите внимание, что если значения будут пустыми строками или null, то они будут также обработаны и удалены, кроме одного.
Для того, чтобы это избежать, можно сделать следующее:

for email in Email.objects.values_list('email', flat=True).distinct():
    Email.objects.exclude(email__isnull=True).exclude(email__exact='').filter(pk__in=Email.objects.filter(email=email).values_list('id', flat=True)[1:]).delete()

Приведенные выше действия можно производить где угодно, но обычно это делает однажды в django shell:

./manage.py shell

Источник: http://stackoverflow.com/questions/5877306/remove-duplicates-in-a-django-query

django