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

Django export model to csv without knowing the field names

我刚接触 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

attribute_value = getattr(Property, name)

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

由于 _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()]