多くのフィールド (約 24) を持つ Django モデルがあり、ユーザーはすべてのデータを手動でフォームに入力する代わりに、スプレッドシートのアップロードを使用してこのオブジェクトのインスタンスを作成できるようにしたいと考えています。
Python の組み込み CSV モジュールを使用すると、これがかなり簡単になることがわかりましたが、正確に使用する方法を理解するのに苦労しています。
コードに関して私が持っているものから始めましょう:
def upload_file(request):
if request.method == "POST":
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_files(request.FILES['file'])
return HttpResponseRedirect('/workflow/')
else:
print form.errors
print request.FILES
return HttpResponseRedirect('/workflow/upload')
else:
form = UploadFileForm()
return render(request, 'fileform.html', {'formset': form})
handle_files
これはアップロードとして CSV ファイルを受け入れ、解析とオブジェクトの作成を処理するためにそれを渡します。これは私が問題を抱えている方法です。
def handle_files(f):
reader = csv.DictReader(f, delimiter=' ', quotechar='|')
... #?
Python ドキュメント ( http://docs.python.org/2/library/csv.html )を模倣しようとしましたが、DictReader のドキュメントはほとんどありません。csv.DictReader()
適切な引数を指定していますか? 持っている場合、どうすれば から情報を取得できreader
ますか? ユーザーにテンプレートを提供するので、CSV ファイルの各列には予測可能なデータがあると想定できます。つまり、列 A にはフィールド X に対応するデータがあり、列 B は Y に対応する、というようになります。リーダーからのデータを解析し、そのデータを使用してオブジェクトを作成するにはどうすればよいでしょうか?
私はそれが次のようなものになると推測しています:
for row in reader:
X=row[1]
Y=row[2]
#etc
my_object = MyObject(x=X, y=Y)
my_object.save()
この道はずれですか?別のタイプの CSV リーダーを使用する必要がありますか?
この投稿には多くの質問があることを知っています。