Django在不知道字段名称的情况下将模型导出到csv

时间:2015-01-15 01:27:57

标签: python django csv django-models django-views

我在django相当新。我想要做的是将模型的内容导出到csv。我已经设法在指定所有模型字段名称时执行此操作但我希望能够将其用于多个模型,因此希望能够导出数据而不指定模型字段名称。

很抱歉,如果这是非常无趣的。我承认我在这方面缺乏知识。

这是我到目前为止所拥有的。

def csv_download(request):
    #
    #exports the properties to a csv file
    #
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="properties.csv"'
    property_list = Property.objects.all()
    writer = csv.writer(response)
    Property._meta.get_all_field_names()
    field_names = Property._meta.get_all_field_names()
    writer.writerow(field_names)
    for each in property_list:
        row=[]
        for name in field_names:
            row.append(Property._______.value())
        writer.writerow(row)
    return response

这是我在Yuji' Tomita'之后调整的。富田的帮助

def csv_download(request):
#
#exports the properties to a csv file
#
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="properties.csv"'
property_list = Property.objects.all()
writer = csv.writer(response)
Property._meta.get_all_field_names()
field_names = Property._meta.get_all_field_names()
writer.writerow(field_names)
for property in property_list:
    row =[]
    for name in field_names:
        try:
            row.append(str(getattr(property, name)))
        except:
            row.append(" ")
    writer.writerow(row)
return response

2 个答案:

答案 0 :(得分:3)

由于不推荐使用_meta.get_all_field_names()(Django 1.10),您可以使用理解列表:

[f.name for f in MyModel._meta.get_fields()]

简称。

有关详细信息,请参阅https://docs.djangoproject.com/en/1.10/ref/models/meta/

代码变成这样:

field_names = [f.name for f in Property._meta.get_fields()]

答案 1 :(得分:2)

attribute_value = getattr(Property, name)

请注意,其中一些字段将返回您要转换为字符串的对象。即row.append(str(getattr(...)))