Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann ich Django F()-Objekte mit String-Verkettung verwenden?

Ich hatte ein ähnliches Problem; Im Grunde wollte ich zwei Felder verketten, um den vollständigen Namen eines Benutzers zu erhalten. Ich habe es so gelöst (muss aber sagen, dass ich Postgres verwendet habe):

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()))

wobei F('...') wertet sein Argument als Abfrage aus, sodass Sie ein Feld des Modells selbst abfragen oder sich über Modelle erstrecken können, wie Sie es in filter/get tun würden, während Value('...') wertet sein Argument wörtlich aus (in meinem Fall brauchte ich ein Leerzeichen zwischen first_name und last_name ) und output_field=... gibt den Typ des annotierten Felds an (ich wollte ein CharField sein ).Weitere Informationen finden Sie in der Dokumentation zu Django Concat

Hoffe, es wird für jemanden da draußen hilfreich sein. Prost