来自不同来源的 Django 注释

问题描述 投票:0回答:1

我正在尝试构建以下注释,本质上是从

nin
或从
IDcard
模型中查找人的
Person
字段。

.annotate(
       checkins_scan=Scan.objects.filter(models.Q(nin=OuterRef("person__idcard__nin") | models.Q(national_number=OuterRef("person__nin")))
       .values(
           data=JSONObject(id="id", nin="nin", datetime="datetime")
       )[:1]
)

但是,我收到以下错误:

NotImplementedError: Use .bitand(), .bitor(), and .bitxor() for bitwise logical operations.

看起来我需要

bitor()
,但我没有进一步了解我找到的基本示例(例如此处的文档)。

当我尝试与

F()
合作时,我得到
TypeError: F.__init__() got an unexpected keyword argument 'nin'

有关如何正确执行此操作的任何线索?

django django-orm
1个回答
0
投票

您需要使用

Subquery
 [Django-doc]:

from django.db.models import OuterRef, Subquery

MyModel.objects.annotate(
    checkins_scan=Subquery(
        Scan.objects.filter(
            models.Q(
                nin=OuterRef('person__idcard__nin')
                | models.Q(national_number=OuterRef('person__nin'))
            ).values(data=JSONObject(id='id', nin='nin', datetime='datetime'))
        )[:1]
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.