這裏是我的代碼兩種形式一種觀點認爲:模型變量失去價值
@login_required
def upload(request):
form_type = ''
transcript = Transcript()
transcript.file_path = ''
if request.method == 'POST':
if 'file_form' in request.POST:
file_form = FileForm(request.POST, request.FILES)
if file_form.is_valid():
path = handle_uploaded_file(request.FILES['file'], request.user)
transcript.file_path = path
transcript.user = request.user
export_form = InfoForm()
form_type = 'info_form'
elif 'info_form' in request.POST:
if transcript.file_path:
info_form = InfoForm(request.POST)
if info_form.is_valid():
transcript.user = request.user
transcript.title = info_form.cleaned_data.get('title')
transcript.instructions = info_form.cleaned_data.get('instructions')
transcript.save()
return HttpResponseRedirect('thanks')
else:
raise ValueError('Transcript object has no file path attribute')
else:
export_form = FileForm()
form_type = 'file_form'
return render(request, 'transcription/upload.html', {'form': export_form, 'form_type': form_type})
始終,文件形式的信息形式之前調用,所以if語句
if transcript.file_path:
#...
代碼應該始終執行。但ValueError總是被提升,意味着transcript.file_path
被重置。這是怎麼發生的?如何解決?
POST中的file_form和info_form是不同提交按鈕的名稱,所以我知道我正在處理哪個表單。
def handle_uploaded_file(file, user):
id = randint(0, 10000)
user_dir = settings.MEDIA_ROOT + '/' + str(user.id).replace(".", "") + '/'
path = user_dir + file.name.replace(".mp3", str(id) + ".mp3")
if not os.path.exists(user_dir):
os.makedirs(user_dir)
with open(path, 'wb+') as destination:
for chunk in file.chunks():
destination.write(chunk)
file = File(destination)
info = {'path': path, 'file': file}
return path
在你的方法的第三行中,你正在執行'transcript.file_path ='''...這樣,如果塊永遠不會執行。 – solarissmoke
它執行,因爲if語句不測試file_path。問題在於第二個區塊。它執行,但引發價值錯誤@solarissmoke –
我不知道你的意思。你的if語句**對'file_path'進行**測試。發生的事情很簡單。在第三行中,你設置了'transcript.file_path ='''。在第14行中,你檢查'transcript.file_path'是否會因爲你將其設置爲''''而始終爲假。因此'else'模塊執行,你得到'ValueError'。 – solarissmoke