Django查询,其中一个字段重复,另一个字段不同

2024-09-30 20:24:07 发布

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

我想知道是否可以创建一个查询,其中一个字段重复,另一个字段不同

基本上,我想要得到所有的usersname,其中First Name是相同的,而user_id是不同的。 是我干的

UserNames.objects.values("first_name", "user_id").annotate(ct=Count("first_name")).filter(ct__gt=0)

这将检索包含所有用户的列表

在tis之后,我进行一些后期处理并创建另一个查询,在这里我只过滤具有first_name__in=['aaa'] & user_id__in=[1, 2]的用户,以获得具有相同first_name但不同user_id的用户

我能在一个查询中完成这项工作吗?还是以更好的方式


Tags: 用户nameinidobjectscountfirstvalues
1条回答
网友
1楼 · 发布于 2024-09-30 20:24:07

您可以在这里使用子查询,但就性能而言,它并不重要,我认为:

from django.db.models import Exists, OuterRef, Q

UserNames.objects.filter(
    Exists(UserNames.objects.filter(
        ~Q(user_id=OuterRef('user_id')),
        first_name=OuterRef('first_name')
    ))
)

或在之前:

from django.db.models import Exists, OuterRef, Q

UserNames.objects.annotate(
    has_other=Exists(UserNames.objects.filter(
        ~Q(user_id=OuterRef('user_id')),
        first_name=OuterRef('first_name')
    ))
).filter(has_other=True)

因此,我们保留了UserNames对象,其中存在一个UserNames对象,该对象具有相同的first_name,并且具有不同的user_id

相关问题 更多 >