2012-01-05 2 views
0

안녕하세요 저는 csv 파일을 생성하는 Django보기를 작성하고 있습니다. 꽤 직설적 인. 내 관점에서 내가 가진 :CSV로 Django 동적 필드 출력

  1. I 출력을 어떻게 텍스트로 모델 필드의 이름이 그래서 첫 번째 행에 필드 제목을 작성할 수 있습니다

    def mysearch(request, exportCSV): 
        ... 
        if 'q' in request.GET or exportCSV: 
         results_list = request.session['results_list'] 
        ... 
        if exportCSV: 
         response = HttpResponse(mimetype='text/csv') 
         response['Content-Disposition'] = 'attachment; filename=myfile.csv' 
         writer = csv.writer(response) 
    
         # write field titles     
         writer.writerow(['name_of_firstfield', 'name_of_secondfield', ... ,]) 
    
         for row in results_list: 
          # write row content 
          writer.writerow([row.firstfield, row.secondfield, ... , ]) 
         return response  
    

    실제로 여기에 두 가지 질문이 있습니다 .

  2. 두 줄에 대해 각 필드를 지정하는 것을 피할 수있는 방법은 무엇입니까? 기본적으로 각 행에 대해 각 필드 이름을 출력하고 각 데이터를 출력한다고 말하고 싶습니다.

여기에 getattr을 사용할 수 있습니까?

답변

2

예를 들어이 snippet을 살펴보면 모델 필드 이름에 model._meta.fields을 통해 액세스 할 수 있으며 getattr()을 사용하면 주어진 개체의 필드 값을 가져올 수 있습니다. 예 :

fields = ct_object._meta.fields 

writer = csv.writer(response) 
writer.writerow([field.column for field in fields]) 

for object in objects_to_export: 
    writer.writerow([getattr(object, field.name) for field in fields]) 
+0

+1 헤더를 column 대신 column.name 대신 사용하는 것이 좋습니다. –

+0

좋은 답변입니다. 그러나 내 쿼리는 매우 복잡하며 여러 조인이 필요하므로 프로세스의 어느 시점에서 필수 필드를 나열해야 할 필요가 있다고 생각합니다. –