【问题标题】:sql equivalent query filter djangosql等效查询过滤器django
【发布时间】:2021-05-26 05:04:36
【问题描述】:

这条 SQL 语句在 Django 中的等价物是什么?

SELECT * FROM NAMES WHERE CONCAT (name,' ',last_name) LIKE '%Lennon%';

【问题讨论】:

  • 请分享您的模型。
  • SomeModel.objects.filter(full_name_icontains=...)
  • @WillemVanOnsem 已经分享了我的模型,重新加载页面

标签: sql django filter


【解决方案1】:

由于 可以与.alias(…) [Django-doc] 合作:

from django.db.models import Value
from django.db.models.functions import Concat

Names.objects.alias(
     total_name=Concat('name', Value(' '), 'last_name')
).filter(
    total_name__contains='Lennon'
)

之前,我们可以使用.annotate(…) [Django-doc]

from django.db.models import Value
from django.db.models.functions import Concat

Names.objects.annotate(
     total_name=Concat('name', Value(' '), 'last_name')
).filter(
    total_name__contains='Lennon'
)

注意:通常 Django 模型被赋予一个单数名称,所以Name而不是Names

【讨论】:

  • 非常感谢威廉,它对我有用,我会采纳你的建议。
【解决方案2】:

我想您想获取所有名字或姓氏都包含特定字符串的“名称”。这可以通过 Q 对象来实现:

Names.objects.filter(Q(name__icontains='Lennon') | Q(lastname__icontains='Lennon'))

请参阅documentation

【讨论】:

  • Avi 感谢您的回答,但这种方式我试过了,但不适合我。
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2010-11-13
  • 1970-01-01
  • 2011-09-17
相关资源
最近更新 更多