在Django的Case中使用多个条件表达式时

时间:2018-01-02 02:00:21

标签: python django

根据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'

有什么方法可以实现这个目标吗?我在这里错过了什么吗?

2 个答案:

答案 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'
    )

希望它有所帮助。如果还有其他不清楚的地方请告诉我。 欢呼!