我不知道我是否用这个题目把自己说清楚了,但是,我的问题是:
我有一个模型,它只是一个事务模型:
class InstanceItemEvaluation(models.Model):
instance = models.ForeignKey(Instance)
item = models.ForeignKey(InstanceItem)
user = models.ForeignKey(User)
factor = models.ForeignKey(Factor)
measure = models.ForeignKey(Measure)
measure_value = models.ForeignKey(MeasureValue, null=True, blank=True)
evaluated_at = models.DateTimeField(null=True, blank=True)
我必须运行以下查询才能从数据库中检索有效值:
@staticmethod
def get_user_evaluations_by_instance(user, instance):
qs = InstanceItemEvaluation.objects.filter(
user=user,
instance=instance,
factor__is_active=True,
measure__is_active=True).exclude(
factor__measure=None)
return qs
查询集本身就说明了这一点,我只是在过滤用户和工作实例等等。此查询集输出此SQL:
SELECT "workspace_instanceitemevaluation"."id",
"workspace_instanceitemevaluation"."instance_id",
"workspace_instanceitemevaluation"."item_id",
"workspace_instanceitemevaluation"."user_id",
"workspace_instanceitemevaluation"."factor_id",
"workspace_instanceitemevaluation"."measure_id",
"workspace_instanceitemevaluation"."measure_value_id",
"workspace_instanceitemevaluation"."evaluated_at"
FROM "workspace_instanceitemevaluation"
INNER JOIN "measures_measure" ON ( "workspace_instanceitemevaluation"."measure_id" = "measures_measure"."id" )
INNER JOIN "factors_factor" ON ( "workspace_instanceitemevaluation"."factor_id" = "factors_factor"."id" )
WHERE ("measures_measure"."is_active" = True
AND "workspace_instanceitemevaluation"."user_id" = 1
AND "factors_factor"."is_active" = True
AND "workspace_instanceitemevaluation"."instance_id" = 5
AND NOT ("factors_factor"."measure_id" IS NULL));
到目前为止还不错。但现在我需要在查询中加上这个子句:
AND "factors_factor"."measure_id" = "measures_measure"."id"
这意味着我只寻找当前与我的因子相关的度量值。不管怎样,我试着这样做(看看最后的过滤器):
@staticmethod
def get_user_evaluations_by_instance(user, instance):
qs = InstanceItemEvaluation.objects.filter(
user=user,
instance=instance,
factor__is_active=True,
measure__is_active=True).exclude(
factor__measure=None).filter(
factor__measure=measure)
return qs
但这根本说不通。现在我有点困了,找不到解决办法。当然,我可以迭代结果并删除我不需要的结果。但是我正在试图弄清楚是否可以使用djangoquerysetapi实现我提到的这个SQL查询。你知道吗
我不确定它在这种情况下是否有效,但通常可以使用
F()
对象。你知道吗相关问题 更多 >
编程相关推荐