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

时间:2015-09-05 04:35:26

标签: python mysql django django-queryset

在动态查询中有一个要求我想比较一个表的2列说" column_a"和" column_b" (所有列都是字符串)。要比较的实际列在运行时决定。

我使用kwargs创建字典。但Django认为RHS是一个绝对值&不是同一个表的列。使用F()是一个选项,但我找不到任何在kwargs中使用F()的文档。

如果我使用kwargs = {' predict_value':' actual_value'} ' actual_value'用作文字字符串而不是列名

我如何使用以下内容: kwargs = {' predict_value':F(' actual_value')}并将其作为Model.objects.filter(** kwargs)传递

或者,有没有办法在LHS中使用F('列')? 例如Model.objects.filter(F(column1_name)= F(column2_name))

1 个答案:

答案 0 :(得分:2)

对于非动态过滤器字段,我会使用:

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)
相关问题