首页 文章

用于concat查询firstname和last_name的Django Queryset

提问于
浏览
1

我想在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)

例如,我们有一个这样的条目 . first_name:“Michael”,last_name:“ Jackson ”

我希望能够查询全名“michael jackson” . 如果能够在没有区分大小写的情况下展示也会很棒 .

这个其他stackoverflow问题是类似的,但答案并没有在正确的Querying full name in Django中满足这个特殊要求 . 我们希望能够进行连续搜索 .

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

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

1 回答

  • 2

    这很有效 .

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

相关问题