我有2个模型,另一个是OneToOneField
让我叫CaseIssue
和ClosedCaseIssue
模型
class CaseIssue(...):
pass
class ClosedCaseIssue(...):
case_issue = models.OneToOneField(CaseIssue, related_name='closed_case_issue', related_query_name='closed_case_issue', on_delete=models.CASCADE)
通过使用related_query_name
,我可以搜索仍处于打开状态的CaseIssue
。已创建由ClosedCaseIssue
确定的打开或关闭,并与CaseIssue
这是正确的数字CaseIssue.objects.filter(closed_case_issue=None).count()
这是我获取Open CaseIssue
的方法。但是结果是1
这是错误的
CaseIssue.objects.filter(closed_case_issue=not None).count()
问题:
获得Open CaseIssue
的实际方法是什么?
答案 0 :(得分:2)
您不能写not None
,因为not None
的结果就是True
。实际上not
检查表达式的真实性,并将其还原。所以:
>>> not None
True
因此,您永远不会将not None
本身传递给Django ORM,仅将True
传递给Django ORM,这意味着您实际上要检查.filter(closed_case_issue=True)
,因此我们不能将closed_case_issue
限制为True
(或1
),通常返回最多1个元素。
但是您可以使用isnull
[Django-doc]查找来对数据库进行检查,以检查它是否不是None
:
CaseIssue.objects.filter(closed_case_issue__isnull=False).count()
或者如果您要计算有CaseIssue
的{{1}}的数量,则可以使用:
ClosedCaseIssue
这等效于您实现的CaseIssue.objects.filter(closed_case_issue__isnull=True).count()
过滤器。
您还可以使用它进行过滤,从而检索closed_case_issue=None
,例如:
CaseIssue