选择具有多个重复字段值的行

2024-05-19 01:05:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Django中选择具有多个重复值行的行

例如,我有一个模型,看起来像这样

class User:
    first_name = models.CharField(...)
    last_name = models.CharField(...)
    ...

还有一个像这样的数据库

first_name | last_name | ...
---------- | --------- | ...
Paul       | Adams     | ...
John       | Smith     | ...
Tom        | Mueller   | ...
John       | Smith     | ...
John       | Adams     | ...
Paul       | Adams     | ...

我想得到数据库中多次存在的first_namelast_name值。其他值不得与行数相等。在这个例子中,我想得到“约翰·史密斯”和“保罗·亚当斯”


Tags: djangoname模型数据库modelsjohnclassfirst
2条回答

首先,需要对字段进行concat

from django.db.models import Count, Value
from django.db.models.functions import Concat

queryset = User.objects.annotate(full_name=Concat('first_name', Value(' '), 'last_name', output_field=CharField())

然后,您需要分组并计算每个唯一全名的计数

queryset = queryset.values('full_name').annotate(full_name_count=Count('full_name'))

只需过滤那些计数大于1的

queryset = queryset.filter(full_name_count__gt=1)

您可以在views.py中或在django shell中使用py manage.py shell执行此操作

from django.db.models import Count
#import your User model 

users_output = User.objects.values('first_name','last_name').annotate(first_name_count=Count('first_name'),last_name_count = Count('last_name')).filter(first_name_count__gt=1,last_name_count__gt=1)

上面的查询将返回类似以下内容的查询集

<QuerySet
 [{'first_name': 'John', 'last_name': 'Smith', 'first_name_count': 2, 'last_name_count': 2},
 {'first_name': 'Paul', 'last_name': 'Adams', 'first_name_count': 2, 'last_name_count': 2}]
>

相关问题 更多 >

    热门问题