Rom*_*kov 5 django django-queryset
我想根据某个子查询是否返回任何结果来过滤查询集.在SQL中,这可能如下所示:
SELECT * FROM events e WHERE EXISTS
(SELECT * FROM tags t WHERE t.event_id = e.id AND t.text IN ("abc", "def"))
Run Code Online (Sandbox Code Playgroud)
换句话说,检索用其中一个指定标记标记的所有事件.
我会如何表达对这个模型使用Django的查询集API Event和Tag?
Man*_*dan 12
你可以这样做:
q = Event.objects.filter(tag__text__in = ['abc', 'def'])
Run Code Online (Sandbox Code Playgroud)
假设有一个ForeignKey从.Tag到Event.
说明:您正在Event根据特定条件过滤对象.使用双下划线语法,您将访问实例的text属性,Tag然后附加IN条件.您不必担心加入外键; Django在幕后为您做到了这一点.如果您想要查看生成的查询,可以打印它:
print q.query
Run Code Online (Sandbox Code Playgroud)
小智 5
当事件有多个标签时,Manoj的解决方案可能会导致问题.
SQL内部联接返回所有行,因此事件可能具有重复结果,解决方案是添加distinct方法.
q = Event.objects.filter(tag__text__in = ['abc', 'def']).distinct()
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |