2015-01-15 2 views
0

У меня довольно новое в django. То, что я пытаюсь сделать, это экспортировать содержимое модели в csv. Мне удалось это сделать, когда я укажу все имена полей модели, но я хочу иметь возможность использовать его с несколькими моделями и, следовательно, хотел бы иметь возможность экспортировать данные без указания имен полей модели.Модель экспорта 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 

Это то, что я настроил его после помощи Юдзи «Томита» Томиты

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

Поскольку _meta.get_all_field_names() является устаревшим (Джанго 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

attribute_value = getattr(Property, name)

Обратите внимание, что некоторые из этих полей будет возвращать объекты вы хотите преобразовать в строки. т.е. row.append(str(getattr(...)))

Смежные вопросы