我们从Python开源项目中,提取了以下2个代码示例,用于说明如何使用django.db.models.query.ModelIterable()。
def patch_queryset(): """ Patch QuerySet """ # Patch `ModelIterable.__iter__` method @funcy.monkey(query.ModelIterable) def __iter__(self): tb = traceback.extract_stack() queryset_storage = QuerySetStorage(self.queryset, tb) current_request_storage.add_queryset_storage_instance(queryset_storage) iterator = __iter__.original(self) for model_instance in iterator: wrapped_model_instance = ModelInstanceWrapper(model_instance) queryset_storage.add_wrapped_model_instance(wrapped_model_instance) yield wrapped_model_instance
def __iter__(self): queryset = self.queryset iter = ModelIterable(queryset) if getattr(queryset, 'subclasses', False): extras = tuple(queryset.query.extra.keys()) # sort the subclass names longest first, # so with 'a' and 'a__b' it goes as deep as possible subclasses = sorted(queryset.subclasses, key=len, reverse=True) for obj in iter: sub_obj = None for s in subclasses: sub_obj = queryset._get_sub_obj_recurse(obj, s) if sub_obj: break if not sub_obj: sub_obj = obj if getattr(queryset, '_annotated', False): for k in queryset._annotated: setattr(sub_obj, k, getattr(obj, k)) for k in extras: setattr(sub_obj, k, getattr(obj, k)) yield sub_obj else: for obj in iter: yield obj