Mysql
 sql >> Base de données >  >> RDS >> Mysql

Puis-je utiliser des objets Django F() avec une concaténation de chaînes ?

J'ai eu un problème similaire; fondamentalement, je voulais concaténer deux champs pour obtenir le nom complet d'un utilisateur. Je l'ai résolu de cette façon (mais je dois dire que j'utilisais 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()))

où, F('...') évalue son argument en tant que requête, de sorte que vous pouvez interroger un champ du modèle lui-même, ou s'étendre sur plusieurs modèles comme vous le feriez dans filter/get, tandis que Value('...') évalue son argument littéralement (dans mon cas, j'avais besoin d'un espace à placer entre first_name et last_name ), et output_field=... spécifie le Type du champ annoté (je voulais être un CharField ).Pour plus d'informations, vous pouvez lire Django docs about Concat

J'espère que ce sera utile pour quelqu'un là-bas. Bravo