python - Django CSV Export..在列表中迭代

标签 python django excel csv export

我正在查看 django 文档,了解如何将数据导出到 CSV 文件,以便将其导入到 Excel 中。到目前为止,我已经可以正常工作了,但我在弄清楚如何导出模型中的多对多字段时遇到了一些麻烦。

到目前为止我已经

writer = csv.writer(response)
writer.writerow(['A','B', 'C', 'D'])

    for x in case_log_list:
        writer.writerow([x.A,
                x.B,
                for y in x.C.all:
                    y,
                x.D)

其中 [list] 内的 for 循环是我尝试迭代该字段中的 ManyToMany 对象的地方。然而我不断收到一个没有任何意义的语法错误..我是否正确地处理了这个问题?

最佳答案

  1. 您的列表定义中缺少终止 ]
  2. 不能将 for 循环放入列表中。

x.C 是某种列表或序列吗?您是否打算将 x.C 的每一项写入 CSV 中的单独字段?

我相信您打算使用列表串联运算符+,它接受两个列表并将它们粘合在一起形成一个列表。像这样使用它:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]

你的例子变成:

for x in case_log_list:
    c_list = [item for item in x.C.all]          # turn x.C into a list
    output_list = [x.A, x.B] + c_list + [x.D,]   # assemble list
    writer.writerow( output_list )

或者如果您想简短一点:

for x in case_log_list:
    writer.writerow ( [x.A, x.B] + [item for item in x.C.all] + [x.D,] )

注释:

  • 如果 x.C.all 已经是一个列表 - 也就是说,如果 type(x.C.all) is listTrue - 那么[x.A, x.B] + x.C.all + [x.D,] 就足够了。

  • c_list = [item for item in x.C.all] 是一个列表理解,它允许您对列表执行操作,而无需编写 for 循环。

    列表推导式非常强大、非常优雅,您应该在任何有意义的地方使用它们。任何时候您需要根据另一个列表创建一个列表,按某些条件过滤列表中的项目,或同时两者,列表理解可能是一个好方法。

  • 单字母变量名称,例如 xABCD 确实很糟糕,因为它们没有提供有关变量保存哪些数据、其类型可能是什么、它可能包含哪些值等信息。如果可以的话,请使用更具描述性的变量名称。

    <

关于python - Django CSV Export..在列表中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307227/

相关文章:

django - django模板中父子关系的树状结构

C# OpenXML 如何从 Cell 获取超链接

excel - 如何通过VBA异步循环在Excel中播放多个WAV文件?

python - 将迭代转化为递归

python - 类型错误 : expected a character buffer object

python - 什么是 R 函数(如 str()、summary() 和 head())的 Python pandas 等价物?

App Engine 标准 : App Fails to Start 上的 Python 3 Django

python - 在 django 框架之外使用 django 模型

Excel 2007 数据透视表自定义计算?

python - 使用 Wing IDE 重命名对象