不引用字段的Django查询
快速概述: 我有一个具有工作流状态的预测模型设置 现在,我正在尝试查询处于特定状态的所有预测,并且当前登录的人是\u staff 如果我写的是一个原始查询,这不会是一个问题,因为我可以写以下内容:不引用字段的Django查询,django,django-queryset,Django,Django Queryset,快速概述: 我有一个具有工作流状态的预测模型设置 现在,我正在尝试查询处于特定状态的所有预测,并且当前登录的人是\u staff 如果我写的是一个原始查询,这不会是一个问题,因为我可以写以下内容: SELECT * FROM forecast WHERE forecast.workflow_state_id in (1,2,3,4) AND 1 = user.is_staff 然而,当我试图在queryset中编写这个时,我不知道如何引用常量。我不想写一个原始查询集,如果可能的话,我想避免使用
SELECT * FROM forecast WHERE forecast.workflow_state_id in (1,2,3,4) AND 1 = user.is_staff
然而,当我试图在queryset中编写这个时,我不知道如何引用常量。我不想写一个原始查询集,如果可能的话,我想避免使用额外的字段
如有任何建议,将不胜感激。谢谢您的常数只是一个
真值
Forecast.objects.filter(workflow_state__in=[1,2,3,4], user__is_staf=True)
您的编辑使事情变得不那么清晰,但您似乎在询问如何检查当前登录的用户,而不是模型引用的用户。在这种情况下,在查询中根本不会这样做;您的示例SQL语句不起作用,在ORM中也不起作用。当然,您可以在Python中执行此操作:
if request.user.is_staff:
forecasts = Forecast.objects.filter(workflow_state__in=[1,2,3,4])
在这种情况下,用户指的是预测模型用户,而不是登录的用户。好吧,这是相同的逻辑,如果您展示您的模型,我可以对查询有更好的了解。为什么您认为在ORM查询中引用常量更难?这是一个简单的问题,传递它。我同意,如果你是避免一个领域,这是非常容易的。然而,在这种情况下,你不是。您或多或少会在查询中添加一个条件,而实际上没有引用模型中的字段。