简体   繁体   English

如何通过动态查询比较表的2列

[英]How to compare 2 columns of a table through dynamic querying

Have a requirement in dynamic querying where i would like to compare 2 columns of a table say "column_a" and "column_b" (all columns are strings). 在动态查询中有一个要求,我想比较表的2列,例如“ column_a”和“ column_b”(所有列均为字符串)。 The actual columns to compare are decided at run-time. 要比较的实际列是在运行时确定的。

I'm using kwargs to create a dictionary. 我正在使用kwargs创建字典。 But Django assumes that RHS is an absolute value & not a column of the same table. 但是Django假设RHS是绝对值,而不是同一表的列。 Using F() is an option, but i cant find any documentation of using F() in kwargs. 使用F()是一个选项,但是我找不到在kwargs中使用F()的任何文档。

if i use kwargs = {'predicted_value':'actual_value'} 'actual_value' is used as a literal string instead of column name 如果我使用kwargs = {'predicted_value':'actual_value'}'actual_value'用作文字字符串而不是列名

How do i use something like: kwargs = {'predicted_value':F('actual_value')} and pass it as Model.objects.filter(**kwargs) 我该如何使用类似的方法:kwargs = {'predicted_value':F('actual_value')}并将其作为Model.objects.filter(** kwargs)传递

Alternately, is there a way to use F('column') in LHS ? 或者,是否可以在LHS中使用F('column')? eg Model.objects.filter(F(column1_name) = F(column2_name)) 例如Model.objects.filter(F(column1_name)= F(column2_name))

For a non-dynamic filter field, I would use: 对于非动态过滤器字段,我将使用:

from django.db.models import F

Model.objects.filter(some_col=F(kwargs.get('predicted_value')))

But if you need it all dynamically, you can try with: 但是,如果您动态需要全部内容,则可以尝试:

kwargs = {'predicted_value':F('actual_value')}
Model.objects.filter(**kwargs)

You can even access related fields: 您甚至可以访问相关字段:

kwargs = {'fk_field__somefield':F('actual_value')}
Model.objects.filter(**kwargs)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM