Django 查询集过滤器与 concat 的关系

Django query set filter over relationship with concat

我想根据可通过 UserProfile 访问的 concat(first_name, last_name) 过滤用户。

if user.profile.first_name + ' ' +  user.profile.last_name LIKE query

我只有User.objects.all()

我用 extra()、ComplexQuery、annotation() 尝试了一些东西,但是 none 它们在工作...

知道怎么做吗?

给你:

from django.contrib.auth.models import User
from django.db.models import Value, Func, F, CharField

User.objects.annotate(full_name=Func(F('first_name'), Value(' '), F('last_name'), function='CONCAT', output_field=CharField())).filter(full_name__icontains='Dusan Plavak')

更新 #1:

User.objects.annotate(full_name=Func(F('profile__first_name'), Value(' '), F('profile__last_name'), function='CONCAT', output_field=CharField())).filter(full_name__icontains='Dusan Plavak')