I had a similar issue; basically I wanted to concatenate two fields to the get the full name of a user. I got it solved this way(but must say that I was using Postgres):
from django.db.models.functions import Concat
from django.db.models import F, Value, CharField
AnyModel.objects.filter(**kwargs).annotate(full_name=Concat(F('model__user_first_name'), Value(' '), F('model__user_last_name'), output_field=CharField()))
where, F('...')
evaluates its argument as a query, so you can query a field of the model itself, or span across models as you would do in filter/get, while Value('...')
evaluates its argument literally(in my case I needed a space to be placed in between first_name
and last_name
), and output_field=...
specifies the Type of the annotated field(I wanted to be a CharField
).
For more info, you can read Django docs about Concat
Hope it will be helpful for someone out there. Cheers
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…