2015-01-15 3 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

()는 지원되지 않습니다 (장고 1.10), 당신은 이해 목록을 사용할 수 있습니다.

자세한 내용은 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)

참고로 조정하는 것이다. 짧은 버전

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

: 즉 _meta.get_all_field_names 이후 row.append(str(getattr(...)))

관련 문제