Как перейти к обращенному набору запросов в django?
Я пытаюсь дважды обойти один обращенный объект, первоначально цикл for работает, но не работает во втором цикле.
x = Subscription.objects.filter(customer_id=customer_id).order_by('-id')[:count]
tmp = reversed(x)
y = call_function(subs=tmp) # inside this function as well object is of type reversed and i am able to loop over it inside the call_function.
for j in tmp: # this loop is not running at all. here as well tmp is a reversed object
print(j)
# call_function(subs=s)
def call_function(s):
for i in s:
print(i)
reversed(…)
[Python-doc] является iterator, а не iterable, поэтому при втором цикле итератор уже "исчерпан". Таким образом, это просто "мелкий объект", который "проходит" по QuerySet
в обратном порядке.
Таким образом, вы используете reversed(…)
дважды . Это позволит не делать запрос во второй раз, так как QuerySet
будет кэшировать результат, так:
x = Subscription.objects.filter(customer_id=customer_id).order_by('-id')[:count]
tmp = reversed(x)
y = call_function(subs=tmp)
for j in reversed(x):
print(j)