Django ORM:注释匹配对象的值

时间:2016-04-27 08:53:03

标签: python django django-orm

我之前一直在使用Django的ORM annotate成功几次,但我遇到了这个具体案例的问题。

当字段tag_to_show的值与某个正则表达式匹配时,我想要注释一个名为my_tag的新字段。

这就是我现在所拥有的:

queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
                                         then=Value("I don't know what to put here")),
                                    output_field=CharField(),
                                    default=Value("Not matched")))

我只是将正则表达式应用于my_tag字段。如果正则表达式匹配某个对象的my_tag字段中包含的字符串,我想在名为tag_to_show的新字段中注释其值。

任何想法在de Value参数中放置什么?

2 个答案:

答案 0 :(得分:1)

我认为你想要的是F() expression

queryset.annotate(tag_to_show=Case(
                      When(my_tag__iregex=pattern, then=F('my_tag')),
                      output_field=CharField(), 
                      default=Value("Not matched")))

答案 1 :(得分:0)

我认为答案是:

queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern,
               then='my_tag'),
               output_field=CharField(),
               default=Value("Not matched")))