Python django.db.models.query 模块,ModelIterable() 实例源码

我们从Python开源项目中,提取了以下2个代码示例,用于说明如何使用django.db.models.query.ModelIterable()

项目:django-eraserhead    作者:dizballanze    | 项目源码 | 文件源码
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
项目:geekpoint    作者:Lujinghu    | 项目源码 | 文件源码
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