Если вы счастливы выбрать один из дубликатов произвольно, я думаю, что следующее может помочь.Возможно, не самый эффективный, но достаточно простой, и я думаю, вам нужно запустить его только один раз.Пожалуйста, убедитесь, что все это работает на некоторых тестовых данных на случай, если я сделал что-то глупое, поскольку вы собираетесь удалить кучу данных.
Сначала мы находим группы объектов, которые образуют дубликаты.Для каждой группы (произвольно) выберите «мастера», который мы собираемся сохранить.Наш выбранный метод состоит в том, чтобы выбрать тот, который имеет наименьшее значение pk
from django.db.models import Min, Count
master_pks = MyModel.objects.values('A', 'B', 'C'
).annotate(Min('pk'), count=Count('pk')
).filter(count__gt=1
).values_list('pk__min', flat=True)
, затем мы зациклим каждый мастер и удалим все его дубликаты
masters = MyModel.objects.in_bulk( list(master_pks) )
for master in masters.values():
MyModel.objects.filter(a=master.a, b=master.b, c=master.c
).exclude(pk=master.pk).del_ACCIDENT_PREVENTION_ete()