DjangoビューでCSVファイルを生成することに関して、すでにいくつかのスレッドがありますが、私の状況に本当に合っている(そして私のために働く)ものはありません。
エンド ユーザー向けに一種の , クエリ ビルダーを作成したため、クエリセットに含まれるフィールドを選択できます。そのため、選択されるフィールドはクエリごとに異なる可能性があるため、「ハード-テーブルの見出しなどをコーディングします。
私のモデル.py
class Customers(models.Model):
firstname = models.CharField(max_length=100)
middlename = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
nickname = models.CharField(max_length=100)
基本的に、1 つの辞書と、クエリセットを構築する 2 つの配列があります。これは、request.POST を通じて取得されます。
customers = Customers.objects.all().filter(**filargs).order_by(*ordargs).values(*selargs)
たとえば、エンド ユーザーが「firstname」フィールドと「lastname」フィールドのみを選択したい場合、次のような CSV を生成したいとします。
First Name Last Name
John Johnson
Ted Samson
Django のドキュメントから見たように、次のコードを使用して行を作成できます
writer.writerow(['First Name','Last Name'])
ただし、クエリセットで選択されるフィールドはクエリごとに異なる可能性があるため、これを動的に行う方法が必要です。以下を試してみましたが、うまくいかないようでした。
writer.writerow(selargs) << selargs being my select field list
実際のレコード (フィールド名ではない) の書き込みに関しては、次のようなことを試みましたが、得られた出力は明らかに間違っていました。
for customer in customers:
for value in customer:
writer.writerow(value)
しかし、ご想像のとおり、これにより、各レコードのすべてのフィールド値に対して個別の行が得られました。ある種の「write.writecell」またはそれらの線に沿った何かがありますか?
助けていただければ幸いです。これには簡単な解決策があると確信しています。
ありがとう、