12. Найти строки с дублирующимися значениями полей

../_images/usertable2.png

Скажем, вам нужны все пользователи, чей first_name совпадает с другим пользователем.

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

>>> duplicates = User.objects.values(
    'first_name'
    ).annotate(name_count=Count('first_name')).filter(name_count__gt=1)
>>> duplicates
<QuerySet [{'first_name': 'John', 'name_count': 3}]>

Если вам необходимо заполнить все записи, вы можете сделать следующее

>>> records = User.objects.filter(first_name__in=[item['first_name'] for item in duplicates])
>>> print([item.id for item in records])
[2, 11, 13]
Вернуться на верх