Например, у нас есть модель такого вида:
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