【发布时间】:2020-10-09 11:29:21
【问题描述】:
我不认为 difference 这个词是正确的,因为你可能会认为 difference() 但我想要实现的目标对我来说是有意义的。如果这是一个已经解决但我无法找到解决方案或对它的理解变得愚蠢的常见问题,我深表歉意。
我有两个相同模型的查询集如下:
qs1 = ErrorLog.objects.get(report=original_report).defer('report') # 272 rows returned
qs2 = ErrorLog.objects.get(report=new_report).defer('report') # 266 rows returned
我想比较第一个和第二个,并找到第一个 qs1 中不匹配的 6 行
我尝试了difference() 和intersection(),但我一直以相同的272 行或0 行结束。我有一种感觉,它将pk 视为一个唯一值,因此它永远不会找到匹配的行。我尝试了以下方法:
# Get the 4 fields I want to compare and exclude
field_1 = [error.field_1 for error in qs2]
field_2 = [error.field_2 for error in qs2]
field_3 = [error.field_3 for error in qs2]
field_4 = [error.field_4 for error in qs2]
# Assuming this would work
qs3 = qs1.exclude(field_1__in=field_1, field_2__in=field_2, field_3__in=field_3, field_4__in=field_4)
# But ended up with 10 rows in qs3 since it doesn't loop thru the fields it just excludes it if found, which isn't ideal since some rows might be duplicate in qs1 so.
然后我想union() 可能会将两者结合起来并排除两者之间的任何重复项,然后我可以使用exclude(pk__in=qs3_union)。但我意识到union() 不是这样工作的。
【问题讨论】:
标签: python-3.x django django-models django-queryset set-difference