Django动态字段输出为CSV

时间:2012-01-05 16:03:09

标签: django csv

您好我正在编写一个生成csv文件的Django视图。非常直截了当。在我看来,我有:

def mysearch(request, exportCSV):
    ...
    if 'q' in request.GET or exportCSV:
        results_list = request.session['results_list']
    ...
    if exportCSV:
        response = HttpResponse(mimetype='text/csv')
        response['Content-Disposition'] = 'attachment; filename=myfile.csv'
        writer = csv.writer(response)

        # write field titles                
        writer.writerow(['name_of_firstfield', 'name_of_secondfield', ... ,])

        for row in results_list: 
            # write row content
            writer.writerow([row.firstfield, row.secondfield, ... , ])
        return response     

这里实际上有两个问题:

  1. 如何将模型字段的名称输出为文本,以便我可以将字段标题写入第一行。

  2. 如何避免为两行指定每个字段(考虑到我有很多字段)。我基本上想对每一行说出,输出每个字段名称然后输出每一段数据。

  3. 我可以在这里以某种方式使用getattr吗?

1 个答案:

答案 0 :(得分:2)

snippet为例,您可以通过model._meta.fields访问模型字段名称,并可以使用getattr()获取给定对象的字段值。 e.g。

fields = ct_object._meta.fields

writer = csv.writer(response)
writer.writerow([field.column for field in fields])

for object in objects_to_export:
    writer.writerow([getattr(object, field.name) for field in fields])