问题标签 [django-q]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
django - Django 中复杂 Q 对象过滤器查询的奇怪行为
您好我正在尝试为 Django 编写一个标记系统,但今天我在过滤器或 Q 对象 (django.db.models.Q) 中遇到了一个奇怪的行为。
我写了一个函数,将搜索字符串转换为 Q 对象。下一步是使用这些查询过滤 TaggedObject。但不幸的是,我得到了一个奇怪的行为。
仅搜索一个 Tag 元素:
当我搜索(id=20)
=>
时Q: (AND: ('tags__tag__id', 20))
,它返回 2 个 ID 为 1127 和 132 的标记对象
当我搜索(id=4)
=>
时Q: (AND: ('tags__tag__id', 4))
,它也返回 2 个对象,但这次是 1180 和 1127
这是请求的 SQL 查询:
使用“或”连词搜索两个标签:
直到这里一切都很好,但是当我进行更复杂的查询时,例如(id=4) or (id=20)
=>
Q: (OR: ('tags__tag__id', 4), ('tags__tag__id', 20))
然后它返回 4(!) 对象 1180、1127、1127、132
和 SQL:
但是 ID 为 1127 的对象被返回了两次,但这不是我想要的行为。我是否必须忍受它,并统一该列表,或者我可以做一些不同的事情。Q 对象的表示对我来说看起来不错。
搜索两个标签“和”连词
但最糟糕的是现在,当我搜索(id=20) and (id=4)
=>
时Q: (AND: ('tags__tag__id', 20), ('tags__tag__id', 4))
,它根本不返回任何对象。但为什么?表示应该没问题,并且 id 为 1127 的对象被两者标记。我错过了什么?
这里又是 SQL:
[编辑]: 我现在意识到,这条 SQL 语句是错误的。至少不是我想要的,因为这里它想要一个 ObjectTagBridge 的 id 为 4,同时 id 为 20。但在我的情况下,它们是 2 个不同的
以下是所涉及的类的相关部分:
谢谢你的帮助
django - 如何使用 Q 正确过滤 Many2Many / Generic Relations?
我有 3 个模型,TaggedObject 与 ObjectTagBridge 有一个 GenericRelation。ObjectTagBridge 具有标记模型的 ForeignKey。
当我将标签附加到对象时,我正在创建一个新的 ObjectTagBridge 并将其 ForeignKey 标签设置为我要附加的标签。这很好,我可以很容易地获得我附加到我的对象的所有标签。但是当我想获取(过滤)所有具有 Tag1 和 Tag2 的对象时,我尝试了这样的事情:
但是现在我的 object_list 是空的,因为它正在寻找具有一个 ObjectTagBridge 和 2 个标记对象的 TaggedObjects,第一个带有 Tag1,第二个带有 Tag2。
我的应用程序将比这个更复杂的 Q 查询,所以我认为我需要一个带有这个 Q 对象的解决方案。事实上,二元连词的任意组合,例如:(...) and ( (...) or not(...))
如何正确过滤?欢迎每个答案,也许还有一种不同的方法可以做到这一点。
谢谢你的帮助!!!
django - Django 搜索包含空格的字符串
我有一个按名称搜索的函数,如果搜索匹配名字或姓氏,它应该返回一个人的名字。问题是,如果我搜索像 'firstname lastname' 这样的字符串,它不会找到匹配的名称(猜测是因为单词之间的空格)。我应该怎么做才能让搜索工作?另外,如果我想用相同的搜索用户名(在另一个表中)我该怎么做?非常感谢!
我的代码:
django - Django - 如何将 QuerySet 转换为 Q 对象?
有没有办法将 QuerySet 转换为 django 中的 Q 对象?
我的具体动机:我想从另一个 QuerySet (qs_B) 中减去一个 QuerySet (qs_A)。我能想到的唯一方法是使用 exclude() 和等效于 qs_A 的 Q 对象。
例子:
python - 使用 Q() 对象请求
有代码和 Tracebeck。我做错了什么?
python - 将 AND 和 OR 与 Q 对象组合的 Django 查询过滤器不返回预期结果
我尝试使用 Q 对象在过滤器中组合 AND 和 OR。看起来 | 表现得像一个 AND。这与之前在同一查询中运行的注释有关,而不是作为子查询。
用 Django 处理这个问题的正确方法是什么?
模型.py
视图.py
生成的 SQL 查询
预期的 SQL 查询
编辑:我添加了预期的 SQL 查询(没有设备子类别的连接)
django - Django SQL OR via filter() & Q(): 动态?
我在我的 Django 网站上实现了一个简单的 LIKE 搜索,我目前使用的是以下代码:
query
字符串在哪里。这会产生一条LIKE
SQL 语句,并且工作得很好。现在我还想将我的搜索查询拆分为术语或单词:
所以words
现在包含一个单词列表,我想实现一个类似于以下的 SQL 语句:
如果有两个以上的词,我希望声明能够按每个词列出所有条目。
有任何想法吗?谢谢!
django - django 中的 Q 对象和 '&' 运算符
我有一个奇怪的问题。
我有 3 个对象。全部都一样
所以我有3篇文章。使用所有相同的标签:“tag1”和“tag2”
我有疑问
这给了我所有的文章。它将返回 6 篇没有 distinct() 的文章,因为它会收集每篇文章 2x,因为它们都有两个标签。
但是,使用此查询:
这给了我没有文章。由于文章包含两个标签,它应该全部返回它们不应该吗?
django - 在带注释的 QuerySet 上使用 Q 对象进行过滤
一个模拟测试用例:
输出:
为什么| 运营商改变这样的行为,我该如何解决?
django - Django 的 ORM 什么时候使用 Q?
我正在尝试使用 Django 的 Q 功能来生成一些 AND 和 OR SQL 查询,但不幸的是我似乎无法弄清楚 Django 如何以及何时生成它的条件。我有一个更复杂的查询,但我决定减少它,看看发生了什么。
没有 Q() 的示例:
现在 Q():
以及从 django.db.connection 生成的查询:
然后我添加另一个值:
但是当我颠倒这个顺序时,我得到:
使用 SQL:
所以在我看来,它每次都忽略了第一个 Q 值——这是预期的行为吗?