python-仅在Django中进行过滤
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-仅在Django中进行过滤,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1977字,纯文字阅读大概需要3分钟。
内容图文
如果查询在列表中,以下是用于过滤的Django:
options = [1,2,3]
result = Example.objects.filter('something__property__in'=options)
所以这里有一个与Example的ForeignKey关系(具有多个关系)
我希望结果是所有具有1 AND 2 AND 3的示例.上面的示例代码将是1 OR 2 OR3.这将是排他的!
例子
不会有以下结果:
examples = Example.objects.all()
things = examples[0].something.all()
for thing in things: print thing.property
#1
#2
#4
#7
结果如下:
examples = Example.objects.all()
things = examples[0].something.all()
for thing in things: print thing.property
#1
#2
#8
#9
#3
原因是第二个示例具有选项中的所有内容,其中第一个示例具有1和2,但没有3!
在Django中有一种简单的方法吗?
我唯一想做的就是过滤上面给出的示例,将所有属性都放在列表中.并将列表与以下python函数中的选项进行比较:
def exclusive_in(list1,list2):
count = 0
for i in list1:
if i in list2:
count += 1
if count == len(list2):
return True
else:
return False
我觉得Django可以在对数据库的查询中做到这一点,这将更加高效.有任何想法吗?
注意:
这必须对选项中任意数量的项目有效,它可以是大于2的任何数字,甚至可以是10或100(尽管不可能100,但是仍然可以)
还请注意,选项将由字符串填充
解决方法:
我知道的唯一方法是使用额外的方法传递查询某些自定义条件.
Django won’t allow you通过表参数传递此条件,因此它必须在哪里.请参阅以下具有django.contrib.auth模型的示例(示例中的Admin组具有所有权限):
>>> from django.contrib.auth import models
>>> permissions_id = [1,2]
>>> where = """(select count(1)
... from auth_group_permissions gp
... where gp.permission_id in ({})
... and gp.group_id = auth_group.id) = {}"""
>>> where = where.format(','.join(map(str, permissions_id)),
... str(len(permissions_id )))
>>> models.Group.objects.extra(where=[where]).all()
[<Group: Admin>]
>>> print models.Group.objects.extra(where=[where]).all().query
SELECT `auth_group`.`id`, `auth_group`.`name`
FROM `auth_group` WHERE (select count(1)
from auth_group_permissions gp
where gp.permission_id in (1,2)
and gp.group_id = auth_group.id) = 2
内容总结
以上是互联网集市为您收集整理的python-仅在Django中进行过滤全部内容,希望文章能够帮你解决python-仅在Django中进行过滤所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。