2012-01-05 24 views
0

こんにちは、私はcsvファイルを生成するDjangoビューを作成しています。かなり簡単。私の見解では私が持っている:CSV形式のDjango動的フィールド出力

  1. どのように私は、テキストとして出力モデルフィールドの名前をので、私は最初の行にフィールドのタイトルを書くことができます:

    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つの質問は、実際にあります。 。

  2. どのようにして各フィールドを指定するのを避けることができますか(私は多くのフィールドを持っていると考えています)。私は基本的に各行のために、それぞれのフィールド名を出力し、各データを出力するように言いたい。

ここではgetattrを使用できますか?

答えて

2

この例では、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ではなく 'field.name'を使用する方が良い)。 –

+0

良い答え。しかし、私のクエリは非常に複雑で、複数の結合が必要なので、プロセスのいくつかの時点で必要なフィールドをリストしていると思います。 –

関連する問題