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查询集中


基础教程推荐
猜你喜欢
- 合并具有多索引的两个数据帧 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01