python - 一个字段重复而另一个字段不同的Django Query
问题描述
我想知道是否可以创建一个字段重复而另一个字段不同的查询。
基本上我想获得所有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
我可以在一个查询中做到这一点吗?还是以更好的方式?
解决方案
您可以在此处使用子查询,但我认为这在性能方面并不重要:
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')
))
)
或在django-3.0之前:
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
。
推荐阅读
- json - 无法发出帖子请求
- python - 如何接受用户输入并在一行代码上运行“if 语句”
- php - 每次按钮单击时,在表格中动态获取 JQuery 对话框中的 JSON 数据
- node.js - 未找到结果时如何从 Mongoose Find 查询返回自定义消息而不是空数组
- java - name=Bad_NodeIdUnknown, value=0x80340000, quality=bad (opc ua milo WriteExample about the NodeId)
- apache-kafka-connect - 从 CDC/发件箱模式的角度看 Debezium 缩放
- python - 根据条件对数据进行分组和随机化
- python-3.x - Discord Python Bot 没有运行
- java - 未找到 Jakarta Servlet 页面
- barcode - 如何计算 GTIN 中的可变重量/价格校验位?