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