Django ORM:注释匹配对象的值

Django ORM: Annotate the Value of matching object

我之前一直在使用 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 的新字段中注释它的值。

知道要在 Value 参数中放入什么吗?

我认为答案是:

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

我想你想要的是 F() expression:

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