如何通过动态查询比较 table 的两列
How to compare 2 columns of a table through dynamic querying
在动态查询中有一个要求,我想比较 table 的 2 列,比如 "column_a" 和 "column_b"(所有列都是字符串)。要比较的实际列在 运行 时决定。
我正在使用 kwargs 创建字典。但是 Django 假设 RHS 是一个绝对值而不是相同 table 的列。使用 F() 是一个选项,但我无法在 kwargs 中找到任何使用 F() 的文档。
如果我使用 kwargs = {'predicted_value':'actual_value'}
'actual_value' 用作文字字符串而不是列名
我如何使用类似的东西:
kwargs = {'predicted_value':F('actual_value')} 并将其作为 Model.objects.filter(**kwargs)
传递
或者,有没有办法在 LHS 中使用 F('column') ?
例如Model.objects.filter(F(column1_name) = F(column2_name))
对于非动态筛选字段,我会使用:
from django.db.models import F
Model.objects.filter(some_col=F(kwargs.get('predicted_value')))
但是如果你需要所有动态,你可以试试:
kwargs = {'predicted_value':F('actual_value')}
Model.objects.filter(**kwargs)
您甚至可以访问相关字段:
kwargs = {'fk_field__somefield':F('actual_value')}
Model.objects.filter(**kwargs)
在动态查询中有一个要求,我想比较 table 的 2 列,比如 "column_a" 和 "column_b"(所有列都是字符串)。要比较的实际列在 运行 时决定。
我正在使用 kwargs 创建字典。但是 Django 假设 RHS 是一个绝对值而不是相同 table 的列。使用 F() 是一个选项,但我无法在 kwargs 中找到任何使用 F() 的文档。
如果我使用 kwargs = {'predicted_value':'actual_value'} 'actual_value' 用作文字字符串而不是列名
我如何使用类似的东西: kwargs = {'predicted_value':F('actual_value')} 并将其作为 Model.objects.filter(**kwargs)
传递或者,有没有办法在 LHS 中使用 F('column') ? 例如Model.objects.filter(F(column1_name) = F(column2_name))
对于非动态筛选字段,我会使用:
from django.db.models import F
Model.objects.filter(some_col=F(kwargs.get('predicted_value')))
但是如果你需要所有动态,你可以试试:
kwargs = {'predicted_value':F('actual_value')}
Model.objects.filter(**kwargs)
您甚至可以访问相关字段:
kwargs = {'fk_field__somefield':F('actual_value')}
Model.objects.filter(**kwargs)