【问题标题】:Django ORM - Dynamically add When to CaseDjango ORM - 动态添加何时案例
【发布时间】:2015-12-22 12:51:19
【问题描述】:

我有一个列表列表

my_list= [
    [1,2,3],
    [4,5,6],
    ...
]

我想像这样注释一些值:

from django.db.models import CharField, Case, When, Value

MyModel.objects.filter(...).annotate(label=Case(When(some_value__in=my_list[0] then=Value('first list')), output_field=CharField()))

现在我需要为my_list 中的其他列表添加一个类似的When,但my_list 可以有不同的长度。

我该怎么做?

【问题讨论】:

    标签: python django django-queryset django-orm


    【解决方案1】:

    Case expression 可以包含任意数量的Whens。您可以创建When 表达式列表,然后将其解压缩为Case

    whens = [When(some_value__in=l, then=Value('list #{}'.format(i)))\
                for i, l in enumerate(my_list)]
    
    MyModel.objects.filter(...).annotate(label=Case(*whens, output_field=CharField()))
    

    【讨论】:

    • Omg *list 今天完全不在我的脑海里。我会测试一下。
    • 完美!,我只是改变了一些东西。感谢您的宝贵时间。
    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2013-07-14
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多