Посмотрите документацию API QuerySet , точнее values_list
(с flat = True
) и distinct()
. Разумеется, это будет быстрее, чем значения
, извлекая нужное поле и преобразуя его в list
или set
.
После этого простой подход к созданию набора OrgIdAvailChoices
и difference_update
с QuerySet должен быть довольно быстрым, чем ваш предложенный.
Альтернативно, вдохновленный комментарием Pannu, подход с itertools
:
import itertools
import string
filter(
lambda x: x not in OrgIdAvailChoices,
[''.join(el) for el in itertools.combinations_with_replacement(string.ascii_uppercase, 2)]
)
Честно говоря, я не уверен, что QuerySet
на самом деле является набором, то есть если поиск в нем логарифмичен, но, судя по моему опыту, правильное использование ORM Django (как описано в начале моего ответа) принесет вам наибольшее ускорение.