Обнаружение дубликатов в Django

У меня есть большая база данных контактов, каждый из которых принадлежит определенному пользователю. Я пытаюсь удалить все дубликаты в списке контактов каждого пользователя. Самое простое, казалось бы, аннотировать строкой user_id||name||address||zipcode, Count, и фильтровать по count > 1. Это работает в большинстве случаев, но у меня есть несколько странных дубликатов. Может ли кто-нибудь указать, что я упускаю?

Вот некоторый код... Я фильтрую по определенному имени, которое, как я знаю, имеет дубликаты для тестирования.

neighbors = neighbors.filter(name__icontains='JOHN WILLIAMS')

keyed_neighbors = neighbors.values('user_id', 'name', 'address', 'zipcode', 'pk'
    ).annotate(dupe_id=Concat(
        Cast('user_id', CharField(max_length=25)), Value('||'), 
        Upper('name'), Value('||'), 
        Upper('address'), Value('||'), 
        Substr('zipcode', 1, 5), Value('||'), 
        Upper('address_line_two'), output_field=CharField()))

dupes = keyed_neighbors.annotate(dupe_id_count=Count('dupe_id'))

Вот подмножество dupe_ids, которые я получаю обратно, и подсчеты:

    {'dupe_id': u'174563||JOHN WILLIAMS||222 WEDGEFIELD DR||28376||', 'dupe_id_count': 1}
    {'dupe_id': u'175875||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}
    {'dupe_id': u'175875||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}
    {'dupe_id': u'177178||JOHN WILLIAMS||5106 PAUL PEEL PL||28348||', 'dupe_id_count': 1}
    {'dupe_id': u'51||JOHN WILLIAMS||2410 COLGATE DR||28304||', 'dupe_id_count': 1}
    {'dupe_id': u'51||JOHN WILLIAMS||2410 COLGATE DR||28304||', 'dupe_id_count': 1}
    {'dupe_id': u'51||JOHN WILLIAMS||4 TALLIN CT||29607||', 'dupe_id_count': 1}

Если кто-то может пролить свет на мою ошибку, буду очень признателен.

Вернуться на верх