我在Django中有一个表格如下:
class TableName(models.Model):
key_one = models.CharField()
key_two = models.CharField()
list = models.TextField()
该表用于为一组用户输入关键字返回list
。如果用户输入ABC
,DEF
,则会返回与
key_one = ABC
key_two = DEF
同时,如果用户输入DEF
,ABC
,则它会返回不同的列表。
这两个非常简单。当输入两个以上的关键字时,棘手的部分会发挥作用:ABC
,DEF
,GHI
。
现在查询应检查表格
key_one = ABC
key_two = DEF
key_one = DEF
key_two = ABC
key_one = ABC
key_two = GHI
key_one = GHI
key_two = ABC
key_one = DEF
key_two = GHI
key_one = GHI
key_two = DEF
但是,我似乎无法对这种输入数据进行查询。非常感谢能帮助你解决这个问题。
答案 0 :(得分:0)
由于查询将包含的逻辑OR的数量,这可能不会很好地执行,但是您可以在单个查询中执行此操作:
from itertools import permutations
from django.db.models import Q
keys = ['ABC', 'DEF', 'GHI']
q_object = None
for key_one, key_two in permutations(keys, 2):
permutation_q = Q(key_one=key_one, key_two=key_two)
if q_object is None:
q_object = permutation_q
else:
q_object |= permutation_q
results = TableName.objects.filter(q_object)
另一种处理方式是,如果key_one和key_two只有4个不同的值,其中三个为'ABC', 'DEF', 'GHI'
,第四个为'XYZ'
。那么以下是更好的选择:
results = TableName.objects.all().exclude(
key_one='XYZ').exclude(key_two='XYZ')
这有利于知道TableName中的唯一值将是key_one或key_two中不包含'XYZ'
的值。