misc: keep cache of queryset result after __iter__ usage (#33013)
This commit is contained in:
parent
ad6385bb28
commit
e03fa5924d
|
@ -786,6 +786,11 @@ def test_lazy_formdata_queryset(pub, variable_test_data):
|
|||
for draft in qs:
|
||||
assert draft.internal_id == formdata.id
|
||||
|
||||
# check __iter__ creates a cached resultset
|
||||
qs = lazy_formdata.objects.drafts()
|
||||
for formdata1, formdata2 in zip(list(qs), list(qs)):
|
||||
assert formdata1 is formdata2
|
||||
|
||||
# check ordering
|
||||
qs = lazy_formdata.objects.pending().order_by('id')
|
||||
assert [x.number for x in qs] == ['1-1', '1-2', '1-3', '1-4', '1-5', '1-6', '1-7']
|
||||
|
|
|
@ -111,18 +111,22 @@ class LazyFormDefObjectsManager(object):
|
|||
|
||||
def __getitem__(self, key):
|
||||
if self._cached_resultset is None:
|
||||
self._cached_resultset = self._formdef.data_class().select(
|
||||
clause=self._criterias, order_by=self._order_by)
|
||||
return LazyFormData(self._cached_resultset[key])
|
||||
self._cached_resultset = [LazyFormData(x) for x in
|
||||
self._formdef.data_class().select(clause=self._criterias, order_by=self._order_by)]
|
||||
return self._cached_resultset[key]
|
||||
|
||||
def __iter__(self):
|
||||
if self._cached_resultset:
|
||||
for formdata in self._cached_resultset:
|
||||
yield LazyFormData(formdata)
|
||||
for lazy_formdata in self._cached_resultset:
|
||||
yield lazy_formdata
|
||||
data_class = self._formdef.data_class()
|
||||
temp_cached_resultset = []
|
||||
for formdata in self._formdef.data_class().select_iterator(
|
||||
clause=self._criterias, order_by=self._order_by):
|
||||
yield LazyFormData(formdata)
|
||||
lazy_formdata = LazyFormData(formdata)
|
||||
temp_cached_resultset.append(lazy_formdata)
|
||||
yield lazy_formdata
|
||||
self._cached_resultset = temp_cached_resultset
|
||||
|
||||
def __nonzero__(self):
|
||||
return any(self)
|
||||
|
|
Loading…
Reference in New Issue