Django动态字段输出为CSV

Django动态字段输出为CSV,django,csv,Django,Csv,嗨,我正在写一个Django视图,它生成一个csv文件。很简单。我认为: def mysearch(request, exportCSV): ... if 'q' in request.GET or exportCSV: results_list = request.session['results_list'] ... if exportCSV: response = HttpResponse(mimetype='text/csv

嗨,我正在写一个Django视图,它生成一个csv文件。很简单。我认为:

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     
这里实际上有两个问题:

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

  • 如何避免为两行指定每个字段(考虑到我有很多字段)。我主要想说的是,对于每一行,输出每个字段名,然后输出每个数据段

  • 我可以在这里使用
    getattr

    以此为例,您可以通过
    model.\u 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])
    

    +1,除了最好使用
    字段。名称
    而不是列作为标题。回答得好。但是,我的查询非常复杂,涉及多个联接,因此我认为我在这个过程中的某个时候必须列出所需的字段。