Mysql
 sql >> Database >  >> RDS >> Mysql

Posso usare oggetti Django F() con concatenazione di stringhe?

Ho avuto un problema simile; in pratica volevo concatenare due campi per ottenere il nome completo di un utente. Ho risolto in questo modo (ma devo dire che stavo usando 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()))

dove, F('...') valuta il suo argomento come una query, quindi puoi interrogare un campo del modello stesso, o estenderti tra i modelli come faresti in filter/get, mentre Value('...') valuta letteralmente il suo argomento (nel mio caso avevo bisogno di uno spazio da inserire tra first_name e last_name ), e output_field=... specifica il Tipo del campo annotato (volevo essere un CharField ). Per ulteriori informazioni, puoi leggere Django docs about Concat

Spero che possa essere utile per qualcuno là fuori. Saluti