获取由Django表过滤的列表的Python方法

获取由Django表过滤的列表的Python方法,django,python-2.7,Django,Python 2.7,我需要像这样过滤一个列表:a=['a','b','c','c','d','e'] 我有一个Django模型T,它包含一个字段unique,我知道元素是否相同。比如说T(id,name\u unique,…others\u字段)。 假设T有 id, name... (1, 'b',...) (2, 'c',...) (3, 'f',...) (4, 'g',...) and alot rows more 我需要一种方法(pythonic)来获得一个列表a,该列表由name_unique中的dis

我需要像这样过滤一个列表:
a=['a','b','c','c','d','e']
我有一个Django模型T,它包含一个字段unique,我知道元素是否相同。比如说
T(id,name\u unique,…others\u字段)
。 假设T有

id, name...
(1, 'b',...)
(2, 'c',...)
(3, 'f',...)
(4, 'g',...)
and alot rows more
我需要一种方法(pythonic)来获得一个列表a,该列表由name_unique中的distinct和non-repeated进行过滤,因此输出应该是

A' = ['a', 'd', 'e']
您可以使用
set()
从值列表创建唯一列表,并对其执行设置类型操作。

这样做的副作用是它将呈现值列表,如果列表太大而无法一次性转换为一个集合,则可以使用迭代器

编辑:这是一个带有迭代器的解决方案:

list=['a','b','c','d']
for m in Models.objects.all().iterator():
    list.remove(m.unique_name)
您可以使用
set()
从值列表创建唯一列表,并对其执行设置类型操作。

这样做的副作用是它将呈现值列表,如果列表太大而无法一次性转换为一个集合,则可以使用迭代器

编辑:这是一个带有迭代器的解决方案:

list=['a','b','c','d']
for m in Models.objects.all().iterator():
    list.remove(m.unique_name)

好的!我可以用IN语句筛选值列表吗?如果我可以通过db查询进行筛选,MyModel.objects可能太大了,对吗?您可以确定地进行筛选。您还可以使用
MyModel.objects.all().iterator()
对for循环或列表中的每个对象执行一次查询。我给答案加了一个好答案!我可以用IN语句筛选值列表吗?如果我可以通过db查询进行筛选,MyModel.objects可能太大了,对吗?您可以确定地进行筛选。您还可以使用
MyModel.objects.all().iterator()
对for循环或列表中的每个对象执行一次查询。我补充了答案