Unable to use Case, When, Then in django queryset(无法使用用例,当,则在Django查询集中)
本文介绍了无法使用用例,当,则在Django查询集中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的型号如下
class Loan(models.Model):
loan_value = models.IntegerField()
channel_seller = models.ForeignKey(ChannelSeller, on_delete=models.CASCADE)
class ChannelSeller(models.Model):
LEVEL_CHOICES = (
('1','Business Consultants'),
('2','Unit Managers'),
('3','Account Managers'),
('4','Branch Managers'),
)
level = models.CharField(max_length=2, choices = LEVEL_CHOICES, null = True, blank = True)
pin_no = models.CharField(max_length=255)
unit_manager = models.ForeignKey('self', limit_choices_to = {"level": '2'}, on_delete=models.DO_NOTHING, null = True, blank = True, related_name='unit_manager_2')
贷款可以由business_Consulting或unit_manager创建。每个业务顾问都将有一个unit_manager,但是unit_manager的unit_manager将为空
说到这里
我正在尝试使用CASE,WHEN,THEN按UNIT_MANAGER字段对查询进行排序,如下所示
transactions = Loan.objects.annotate(unit_manager_pin = Case(When('channel_seller__level' == '2', then='channel_seller_pin_no'), When('channel_seller__level' == '1', then='channel_seller__unit_manager__pin_no'))).filter(channel_seller__level__in = ['1','2']).order_by('channel_seller__level')
但是,此查询引发错误__init__() takes either a Q object or lookups as keyword arguments
dbm
您正在编写要由推荐答案执行的查询。您不能在该上下文中使用Python代码('channel_seller__level' == '2')。请参阅conditional expressions上的文档。
请清晰地格式化您的代码!请在括号内使用换行符以继续。
在本例中,您只需将==更改为=,但了解原因很重要。When的参数类似于.filter的参数。因此,要测试大于,应为When( field__gt = 2, ...)
您还需要使用F来引用数据库中的值。如果没有F,它将(可能,不确定)是一个错误。(如果需要固定值,可以使用Value('fixed-value'))
transactions = Loan.objects.annotate(unit_manager_pin =
Case(When('channel_seller__level' = '2',
then=F('channel_seller_pin_no')),
When('channel_seller__level' = '1',
then=F('channel_seller__unit_manager__pin_no'))
)
).filter(
...
这篇关于无法使用用例,当,则在Django查询集中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:无法使用用例,当,则在Django查询集中
基础教程推荐
猜你喜欢
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
