我有first_namelast_name和;alias(可选),我需要搜索.所以,我需要一个查询来提供所有别名集的名称.

如果我能做到的话:

Name.objects.filter(alias!="")

那么,上述的类似功能是什么呢?

推荐答案

您可以这样做:

Name.objects.exclude(alias__isnull=True)

如果需要排除空值and个空字符串,首选的方法是将条件链接在一起,如下所示:

Name.objects.exclude(alias__isnull=True).exclude(alias__exact='')

将这些方法链接在一起基本上会独立地判断每个条件:在上面的示例中,我们排除了alias为null或or为空字符串的行,因此得到了所有Name个对象,这些对象都有一个not null、not empty alias字段.生成的SQL看起来像:

SELECT * FROM Name WHERE alias IS NOT NULL AND alias != ""

您还可以将多个参数传递给对exclude的单个调用,这将确保仅排除符合every条件的对象:

Name.objects.exclude(some_field=True, other_field=True)

这里,排除了some_fieldandother_field为TRUE的行,因此我们获得了两个字段都不为TRUE的所有行.生成的SQL代码看起来有点像这样:

SELECT * FROM Name WHERE NOT (some_field = TRUE AND other_field = TRUE)

或者,如果你的逻辑比这更复杂,你可以使用Django的Q objects:

from django.db.models import Q
Name.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

更多信息请参见Django文档中的this pagethis page.

顺便说一句:我的SQL示例只是一个类比--实际生成的SQL代码可能看起来不同.通过实际查看Django查询生成的SQL,您将更深入地了解Django查询是如何工作的.

Django相关问答推荐

如何在Django上创建ManyToMany管理面板?

Django REST序列化程序TO_REATION失败

带有变量键的 Django 模板括号表示法不起作用

DjangoAdmin与外部数据库的模型无法保存或过滤

Django rest framework, AttributeError: 'str' object has no attribute 'data' 无法使用表单上传图片

有谁知道是否可以将您的 Django Heroku 应用程序放到 App Store/Google Play 上?

Django - 是否可以为查询集预取单个字段的多个过滤器?

Playframework 和 Django

Django 模板中的 Handlebars.js

Django - 站点匹配查询不存在

使用移动应用程序保护通信 [真实性、隐私和完整性]?

如何从 django 自定义中间件类返回 rest_framework.response 对象?

如何验证对象是否存在于多线程中

Django 模板列表的第一个元素

django:manytomanyfield 和 through 如何出现在 admin 中?

在 Django 中舍入小数点

在 Django 1.8 或更高版本中填充时出现Models aren't loaded yet"错误

整数的Python正则表达式?

Django:在还原(迁移)后try 访问数据库时权限被拒绝

ImportError:没有名为 django_filters 的模块