如果查询在列表中,以下是用于筛选的Django:
options = [1,2,3]
result = Example.objects.filter('something__property__in'=options)
所以这里something
是ForeignKey
关系(有多个关系)到{
我希望result
是所有的Examples
,它们的something
为1、2和3。上面的示例代码是1、2或3。这是独家的!在
以下内容将不属于result
:
以下是result
:
examples = Example.objects.all()
things = examples[0].something.all()
for thing in things: print thing.property
#1
#2
#8
#9
#3
作为第二个示例的原因是包含options
中的所有内容,其中第一个示例有1和2,但不是3!在
在Django有没有一种简单的方法可以做到这一点?
我唯一能做的就是用上面给出的例子进行过滤,获取列表中的所有properties
。并将该列表与以下python函数中的options
进行比较:
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可以在对数据库的查询中做到这一点,这样效率会更高。有什么想法吗?在
这必须适用于options
中任意数量的项目,它可以是大于2的任何数字,甚至是10或100(虽然100不太可能,但仍然有可能)
还要注意,options
将由字符串填充
我知道的唯一方法是使用
extra
方法传入查询某些自定义条件。在Djangowon't allow you要用
tables
参数传递这个条件,那么它必须在where
中。请使用django.contrib.auth models
(示例中的Admin组拥有所有权限)查看以下示例:相关问题 更多 >
编程相关推荐