根据Django文档,可以在When子句中使用多个条件。
When(registered_on__gt=date(2014, 1, 1),registered_on__lt=date(2015, 1, 1),then='account_type')
但是,在使用Case子句时,我无法使用相同的内容。
Case(When(registered_on__gt=date(2014, 1, 1),registered_on__lt=date(2015, 1, 1), then='account_type'), default='default')
我最终收到以下错误:
TypeError: __init__() got multiple values for keyword argument 'then'
有什么方法可以实现这个目标吗?我在这里错过了什么吗?
答案 0 :(得分:5)
也许Q expression可以提供帮助。试试这个:
Case(When(Q(registered_on__gt=date(2014, 1, 1)) & Q(registered_on__lt=date(2015, 1, 1)), then='account_type'), default='default')
答案 1 :(得分:1)
正如我在Case表达式的Django docs中看到的那样,When
类中的每个Case
表达式都有自己的then
参数,而不是将所有条件放入只有一个参数When
,我想也许你应该提取到2个When
表达式,然后用2个独立的参数,如下所示:
Case(
When(
registered_on__gt=date(2014, 1, 1),
then = 'account_type',
),
When(
registered_on__lt=date(2015, 1, 1),
then = 'account_type',
),
default='default'
)
希望它有所帮助。如果还有其他不清楚的地方请告诉我。 欢呼!