我正在使用Django ORM从数据库中检索数据:

ws = Ws.objects.all()
ws = ws.filter(*q_objects, **filter_kwargs)
ws = ws.order_by(*sort_list) 
ws = ws.annotate(created_unix=UnixTimestamp(F('created')), date_unix=UnixTimestamp(F('date')))))
total_sum = ws.aggregate(total=Sum('ts_time', output_field=DecimalField()))['total'])['total']
LIST_FIELDS[1], LIST_FIELDS[2] = 'created_unix', 'date_unix'
return JsonResponse({'table_data': list(ws.values_list(*LIST_FIELDS)), 'summ_time': total_sum}, safe=False)    ```    

我需要在LIST_FIELDs中添加一个新列,对于每对具有多个匹配字段的行,

例如: 对于LIST_FIELDS [0]和LIST_FIELDS [2]

LIST_FIELDS[0] LIST_FIELDS[1] LIST_FIELDS[2] LIST_FIELDS[3]
1 1 3 True
1 1 2 True
2 1 1 False
1 1 2 True
1 1 3 True

我试着问GPT4,但T9固执地给我

ws = ws.annotate(
    match=Case(
        When(field1=F('field2'), then=Value(True)),
        default=Value(False),
        output_field=BooleanField()
    )
)

但这就像一排比较field1 == field2个 我需要真,如果row1[field1] == row2[field1] and row1[field2] == row2[field2]

推荐答案

对于给定的列列表,您要判断是否有一行具有相同值,且值为Exists subquery [Django-doc]:

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

UNIQUE_FIELDS = ['created_unix', 'date_unix']

ws = Ws.objects.filter(*q_objects, **filter_kwargs)

ws = Ws.annotate(
    has_duplicate=Exists(
        ws.filter(
            ~Q(pk=OuterRef('pk')), Q(**{k: OuterRef(k) for k in UNIQUE_FIELDS})
        )
    )
)

因此,我们在ws个对象中寻找一个Ws对象(如此过滤)的存在,它具有不同的主键(~Q(pk=OuterRef('pk'))),并且对于UNIQUE_FIELDS中的项目是相同的.因此,如果在这种情况下存在具有created_unixdate_unix相同值的另一行,则字段has_duplicateTrue.

响应是safe JSON,所以你可以删除safe=False,参数.发送不安全的JSON当然不是一个好主意.

Python相关问答推荐

多处理代码在while循环中不工作

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何检测背景有噪的图像中的正方形

Python上的Instagram API:缺少client_id参数"

Python中的嵌套Ruby哈希

查找两极rame中组之间的所有差异

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

根据二元组列表在pandas中创建新列

通过pandas向每个非空单元格添加子字符串

在pandas中使用group_by,但有条件

如何在Python中使用Iscolc迭代器实现观察者模式?

python的文件. truncate()意外地没有截断'

提取最内层嵌套链接

pytest、xdist和共享生成的文件依赖项

时长超过24小时如何从Excel导入时长数据

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)

Scipy.linprog的可行性有问题吗?(A_ub@x0<;=b_ub).all()为True-但是-linprog(np.zeros_like(X0),A_ub=A_ub,b_ub=b_ub)不可行

如何使用Polars从AWS S3读取镶木地板文件

删除另一个div中的特定div容器