Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django queryset迭代器未返回正在运行的记录_Python_Django_Csv - Fatal编程技术网

Python django queryset迭代器未返回正在运行的记录

Python django queryset迭代器未返回正在运行的记录,python,django,csv,Python,Django,Csv,我的modeladmin的操作代码如下,它返回2个CSV文件: def export_csv(modeladmin, request, queryset): queryset_f1 = queryset response_f1 = export_f1(modeladmin, request, queryset_f1) queryset_f2 = queryset response_f2 = export_f2(modeladmin, request, quer

我的modeladmin的操作代码如下,它返回2个CSV文件:

def export_csv(modeladmin, request, queryset):

    queryset_f1 = queryset
    response_f1 = export_f1(modeladmin, request, queryset_f1)

    queryset_f2 = queryset
    response_f2 = export_f2(modeladmin, request, queryset_f2)

    return (response_f1,response_f2)
def export_csv(modeladmin, request, queryset):

    queryset_f1 = queryset
    response_f1 = export_f1(modeladmin, request, queryset_f1)

    queryset_f2 = queryset
    response_f2 = export_f2(modeladmin, request, queryset_f2)

    return (response_f1,response_f2)
由于我需要相同的queryset对象,因此每次处理时,我都使用迭代器,如下所示:

def export_csv(modeladmin, request, queryset):

    queryset_f1 = queryset.iterator()
    response_f1 = export_f1(modeladmin, request, queryset_f1)

    queryset_f2 = queryset.iterator()
    response_f2 = export_f2(modeladmin, request, queryset_f2)

    return (response_f1,response_f2)

现在程序在2个CSV中没有输出任何结果。为什么会这样?我在export_f1方法中操作一些对象,我不想在export_f2方法中更改这些对象,因此我使用迭代器()。如果我不使用iterator()单独调用这两个方法,它们将返回CSV中的数据。我想在模型管理员中使用此操作方法同时返回2个CSV文件。我怎样才能做到这一点?使用django 1.6.5

你应该显示你的导出f1导出f2的一些代码,因为当你使用
迭代器()
时,你的代码几乎与查询集中的代码相同,但有些不同

  • iterator()
    不会缓存查询,如果重复100次,django将执行100次
  • iterator()
    当您有一个非常大的查询集并且只需要很少的对象时,它是很好的
  • 使用迭代器时必须小心,因为它在操作后可能是空的
访问
iterator()
元素与查询集不同,您可以用不同的方式访问它。从
.iterator()
生成完整列表的简单方法是:

list(queryset.iterator())
如果在名为
iter
的变量中有
queryset.iterator()
,并且执行了
list(iter)
,则此指令之后
iter
将为空

您还可以使用
.next()
逐个访问对象:

如果执行
queryset.iterator().next()
将始终返回第一个元素


但所有这些都取决于您的函数export\u fiexport\u f2以及您如何使用queryset/迭代器。如果显示函数的一些代码,我们可能会发现问题已通过在方法定义中调用迭代器而不是调用方法export\u csv来解决:

def export_f1(modeladmin, request, queryset):
    for obj in queryset.iterator():
         pass
类似地,对于export_f2,通过删除迭代器调用将上述export_csv代码修改为:

def export_csv(modeladmin, request, queryset):

    queryset_f1 = queryset
    response_f1 = export_f1(modeladmin, request, queryset_f1)

    queryset_f2 = queryset
    response_f2 = export_f2(modeladmin, request, queryset_f2)

    return (response_f1,response_f2)