【问题标题】:"Not like" condition in QuerySetQuerySet 中的“不喜欢”条件
【发布时间】:2015-10-25 08:28:57
【问题描述】:

Django 新手,以下是我的问题:

背景

我有一列的值如下:

ABCDEF
ABCDDD
ABCDEG
ACDFER
ACDFDF
AVXZSE
XSDFRW

我想拒绝从 AVXS 开始的值,我真的很惊讶我没有在线获得任何与 django 查询集相关的内容,这可以帮助我做到这一点,而不是 MySQL 的简单 @987654326 @.
一种解决方案i found on SOQ 相关,但我不能随意使用任何 out-of-native-inbuilt 方法。

问题:

我想知道是否有人可以指导我在上述情况下执行exclude,如下所示:

DataSet.exclude(column_name="^AV",column_name="^XS")

【问题讨论】:

  • “我在 SO 上找到的一个解决方案与 Q 有关,但我不能随意使用任何非原生内置方法。”这毫无意义,Q 对象是 Django 的内置部分
  • 我承认我的知识仍然很低,无法识别 内置 与非内置的....当我收到此错误时,我做了引用的假设 = > NameError: name 'Q' is not defined
  • 啊,这只是意味着你还没有将它导入到你的 python 文件中,你需要在顶部有一个像 from django.db.models import Q 这样的行和你的其他导入
  • damnnnn .....现在你知道为什么我的网名和我的名字一样了吧!! :D
  • 没有问题,我们都必须从某个地方开始 :)

标签: python django django-queryset


【解决方案1】:

__startswith 是你想要的。

DataSet.exclude(column_name__startswith="AV").exclude(column_name__startswith="XS")

(注意我不明白你对 Q 的反对意见:没有 Django 是内置的,Q 与任何 QuerySet 方法一样是核心 Django 的一部分。)

【讨论】:

  • 我尝试与Q 合作,但shell 出错了......而且项目中的新功能让我有点害怕! :) 出于好奇,使用 2 个exclude,django 是否首先获取数据集 没有 AV,然后再次重新扫描此数据集以删除 XS....所以总共进行了 2 次扫描?
  • @NoobEditor 不,Django 在您尝试访问查询集中的元素之前什么都不做,此时它会执行单个查询 querysets are lazy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多