Django Django 2中带有Exists子查询的表达式出现时引发:NotImplementedError:对位逻辑运算使用.bitand和.bitor

如何解决Django Django 2中带有Exists子查询的表达式出现时引发:NotImplementedError:对位逻辑运算使用.bitand和.bitor

models.py

class PersonPhoneQuerySet(models.QuerySet):

    def with_bill_sums(self,bill_date_from: datetime.date,bill_date_till: datetime.date):
        return self.annotate(
            sum_all=Coalesce(
                Sum('telephone__bill__value',filter=Q(
                    telephone__bill__dt__gte=bill_date_from,telephone__bill__dt__lte=bill_date_till,)),Value(0)
            ),sum_service=Coalesce(
                Sum(
                    Case(
                        When(
                            Q(
                                # Problem line
                                Exists(Telephone.objects.filter(num=OuterRef('telephone__bill__call_to'))) |
                                Q(telephone__bill__bill_type=BillType.INTERNET) |
                                Q(telephone__bill__bill_type=BillType.PAYMENT) |
                                Q(telephone__bill__call_to=BILL_IN_ROAMING_AON_TEXT),telephone__bill__dt__gte=bill_date_from,),then='telephone__bill__value'),default=0,output_field=models.DecimalField()
                    )),)


class Telephone(models.Model):
    num = models.CharField('Номер',max_length=50,unique=True)
    sim = models.CharField('SIM карта',blank=True)


class Person(models.Model):
    fio = models.CharField('ФИО',max_length=50)
    email = models.EmailField('Email',null=True,blank=True)


class PersonPhone(models.Model):
    BIG_DATE = datetime.date(3333,1,1)

    objects = PersonPhoneQuerySet.as_manager()

    telephone = models.ForeignKey(Telephone,models.CASCADE,verbose_name='Телефон')
    person = models.ForeignKey(Person,verbose_name='Сотрудник')
    date_from = models.DateField('Начало периода привязки')
    date_till = models.DateField('Конец периода привязки',default=BIG_DATE)
    limit = models.IntegerField('Лимит',default=0)
    tariff = models.CharField('Тариф',max_length=20,blank=True,default='')


class Bill(models.Model):
    telephone = models.ForeignKey(Telephone,verbose_name='Телефон')
    bill_type = models.DecimalField('Тип соединения',choices=BillType.choices,db_index=True,max_digits=1,decimal_places=0)
    dt = models.DateTimeField('Дата и время звонка')
    value = models.DecimalField('Стоимость',max_digits=10,decimal_places=4,default=0)
    call_to = models.CharField('Вызываемый абонент',max_length=32,default='',db_index=True)
    duration = models.DecimalField('Продолжительность,сек',max_digits=8,decimal_places=0,blank=True)
    call_direction = models.CharField('Направление соединения',choices=CallDirection.choices,max_length=1,default=CallDirection.UNDEFINED)

运行:

from apps.mobile import models,consts
from common_tools.date import last_day_of_month

date_from = datetime.datetime(2020,5,1)
date_till = last_day_of_month(date_from)
qs = models.PersonPhone.objects.filter(
    person__fio__icontains='SomeMan',telephone__num__icontains='+79655171234',date_from__lte=date_from,date_till__gte=date_till,).with_bill_sums(date_from,date_till)
for i in qs:
    print(
        i,'\n sum_all: {}'.format(i.sum_all),'\n sum_service: {}'.format(i.sum_service),)

它适用于Django 3。

是否可以使用django 2运行它?

如果我将Exists expr移至命名注释-然后将其分组。

我可以通过Bill查询来实现它,但是想要使用PersonPhoneQuerySet.with_bill_sums

跟踪:

Traceback (most recent call last):
  File "C:/kvk/develop/Python/int/manage.py",line 21,in <module>
    main()
  File "C:/kvk/develop/Python/int/manage.py",line 17,in main
    execute_from_command_line(sys.argv)
  File "C:\python\venv\int\lib\site-packages\django\core\management\__init__.py",line 381,in execute_from_command_line
    utility.execute()
  File "C:\python\venv\int\lib\site-packages\django\core\management\__init__.py",line 375,in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\python\venv\int\lib\site-packages\django\core\management\base.py",line 323,in run_from_argv
    self.execute(*args,**cmd_options)
  File "C:\python\venv\int\lib\site-packages\django\core\management\base.py",line 364,in execute
    output = self.handle(*args,**options)
  File "C:\kvk\develop\Python\int\int\management\commands\exec.py",line 60,in handle
    return str(function(**kwargs))
  File "C:\kvk\develop\Python\int\apps\mobile\samples\check.py",line 482,in main
    qs_logic1()
  File "C:\kvk\develop\Python\int\apps\mobile\samples\check.py",line 389,in qs_logic1
    qs = models.PersonPhone.objects.filter(
  File "C:\kvk\develop\Python\int\apps\mobile\models.py",line 95,in with_bill_sums
    Exists(Telephone.objects.filter(num=OuterRef('telephone__bill__call_to'))) |
  File "C:\python\venv\int\lib\site-packages\django\db\models\expressions.py",line 106,in __or__
    raise NotImplementedError(
NotImplementedError: Use .bitand() and .bitor() for bitwise logical operations.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-