前提・実現したいこと
Djangoでのテスト用のコードを書きたいです。
こちらで質問しましたように、Djangoを使用してのファイルアップローダを作成しようとしております。
テスト用のコードを書いてみたのですが、エラーが出ており、それがどういうことなのか、またどうすれば消えるのかがわかりません。
発生している問題・エラーメッセージ
AttributeError: 'NoneType' object has no attribute 'file_name'
該当のソースコード
Django
1# upload_form/views.py 2 3from django.shortcuts import render, redirect 4from django.template.context_processors import csrf 5from django.conf import settings 6from .models import FileNameModel 7from .forms import UploadFileForm 8 9import sys, os 10 11import pandas as pd 12import numpy as np 13 14UPLOADE_DIR = os.path.dirname(os.path.abspath(__file__)) + '/static/files/' 15 16# Create your views here. 17 18class InvalidSourceException(Exception): 19 pass 20 21 22def form(request): 23 if request.method == 'POST': 24 form = UploadFileForm(request.POST, request.FILES) 25 if form.is_valid(): 26 27 file = request.FILES['file'] 28 29 path = os.path.join(UPLOADE_DIR, file.name) 30 31 with open(path, 'wb') as destination: 32 33 for chunk in file.chunks(): 34 destination.write(chunk) 35 36 df = pd.read_csv(path) 37 38 insert_data = FileNameModel(file_name = file.name) 39 insert_data.save() 40 41 return redirect(to='complete/') 42 else: 43 form = UploadFileForm() 44 return render(request, 'upload_form/form.html', {'form':form}) 45 46def complete(request): 47 f = FileNameModel.objects.order_by('id').last() 48 path = os.path.join(UPLOADE_DIR, f.file_name) 49 df = pd.read_csv(path) 50return render(request,読み込んだファイルを表示するようにする)
Django
1# upload_form/tests.py 2 3class ViewsTest(TestCase): 4 def test_complete_get(self): 5 response = self.client.get(resolve_url('upload_form:complete')) 6 self.assertEqual(200, response.status_code)
試したこと
上記エラーは、tests.pyのtest_complete_get()関数で生じています。
views.pyのcomplete関数にある
path = os.path.join(UPLOADE_DIR, f.file_name)
の部分でファイルが見つけられないということなのだと思うのですが…。
補足情報(FW/ツールのバージョンなど)
Python 3.6.5
Django 2.0
ご教示いただけますと幸いです。よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 06:29
2018/07/30 06:39
2018/07/30 07:17 編集
2018/07/30 07:46