【问题标题】:Django Queryset for concat query fullname of first_name and last_nameDjango Queryset 用于连接查询 first_name 和 last_name 的全名
【发布时间】:2017-12-09 00:03:14
【问题描述】:

我想在 Django 中进行全名(first_name concat last_name)搜索/查询。

以下是我的模型:

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employee')
    company = models.ForeignKey(Company)
    username = models.CharField(max_length=30, blank=False)    
    first_name = models.CharField(max_length=30, blank=False)
    last_name = models.CharField(max_length=30, blank=False)    
    created_at = models.DateTimeField(auto_now_add=True)

例如,我们有一个这样的条目。 名字:“迈克尔”,姓氏:“杰克逊”

我希望能够查询全名“michael jackson”。如果可以在不区分大小写的情况下显示也很好。

this other stackoverflow question类似,但答案不符合正确Querying full name in Django中的这一特殊要求。我们希望能够进行连续搜索。

我尝试了注释,但它不起作用

queryset = Employee.objects.annotate(fullname=Concat('first_name', 'last_name'))
search_result = queryset.filter(fullname__icontains='michael jackson')

【问题讨论】:

    标签: python django search django-queryset concat


    【解决方案1】:

    这行得通。

    from django.db.models.functions import Concat
    from django.db.models import Value
    
    queryset = Employee.objects.annotate(fullname=Concat('first_name', Value(' '), 'last_name'))
    c = queryset.filter(fullname__icontains='michael jackson')
    

    【讨论】:

    • 在这种情况下,如果 middle_name 存在,则此处为 queryset = Employee.objects.annotate(fullname=Concat('first_name', Value(' '), 'middle_name', Value(' '), 'last_name',)),如果中间名为空,则值为 'michael jackson'。那时就不会搜索了。因为这里包括两个空格。 @Axil
    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2019-06-13
    • 1970-01-01
    • 2017-10-12
    • 2016-03-19
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多