2016-04-27 4 views
0

Я использовал ORM Django annotate раньше с успехом несколько раз, но у меня возникают проблемы с этим конкретным случаем.Django ORM: аннотировать значение совпадающего объекта

Я хочу, чтобы аннотировать новое поле, называемое 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 параметр?

+1

Что вы хотите в качестве значения 'tag_to_show'? Это 'True' и' False' в зависимости от соответствия регулярного выражения или нет? – AKS

+0

Я хочу, чтобы 'tag_to_show' имел значение строки соответствия. Но если его значение не соответствует регулярному выражению, я хочу, чтобы оно имело значение «Не соответствует». – Xar

ответ

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"))) 
+0

Вот оно! Большое спасибо AKS. – Xar

0

Я думаю, что ответ:

queryset.annotate(tag_to_show=Case(When(my_tag__iregex=pattern, 
       then='my_tag'), 
       output_field=CharField(), 
       default=Value("Not matched"))) 
Смежные вопросы