我正在尝试使用Django创建一个网站。我不熟悉Django,但遇到了问题。我想创建一个表单,该表单具有用于视频上传的文件选择以及两个不同的按钮,分别是“上传”和“保存”。我不想使用一个按钮将视频直接保存到数据库。因此,我需要两个按钮。当用户选择一个文件并单击“上传”按钮时,该视频应被上传。然后,如果用户单击“保存”按钮,则视频应保存到数据库(模型)中。视频选择和上传过程没有问题。但是,当我单击“保存”按钮时,由于单击“上传”按钮后视频消失了,因此无法保存视频。
HTML文件:
<form method="post" enctype="multipart/form-data" id="form1">
<div class="form-group" >
<label for="exampleFormControlFile1">Upload your video: </label>
{% csrf_token %}
{{ form.as_p }}
</div>
<button class="btn btn-primary btn-lg" name="upload_bttn" id="bttn1" type="submit" >Upload</button>
<button class="btn btn-primary btn-lg" name="save_bttn" type="submit" >Save</button>
<p>Uploaded file: <a href="{{url}}" target="_blank">{{url}}</a></p>
views.py
def video_upload(request):
context = {}
if request.method == 'POST' and 'upload_bttn' in request.POST:
uploaded_file = request.FILES['videofile']
task_name = request.POST['task']
env_name = request.POST['environment']
light_name = request.POST['lightcondition']
fs = FileSystemStorage()
file_name = fs.save(uploaded_file.name, uploaded_file)
url = fs.url(file_name)
context['url'] = url
form = VideoForm(request.POST, request.FILES)
elif request.method == 'POST' and 'save_bttn' in request.POST:
form = VideoForm(request.POST, uploaded_file)
if form.is_valid():
form.save()
return redirect('video-upload')
else:
form = VideoForm()
context['form'] = form
return render(request, 'video_upload.html', context)
class VideoForm(forms.ModelForm):
class Meta:
model = Video
fields = ("videofile","task","environment","lightcondition")
models.py
class Video(models.Model):
videofile= models.FileField(upload_to='video', null=True, verbose_name="")
task = models.CharField(max_length=9, choices=[
('task1','task1'),
('task2','task2')],default='undefined')
environment = models.CharField(max_length=9, choices=[
('env1','env1'),
('env2','env2'),
('env3','env3')],default='undefined')
lightcondition = models.CharField(max_length=9, choices=[
('light1','light1'),
('light2','light2'),
('light3','lighh3')],default='undefined')
def __str__(self):
return str(self.videofile, self.task, self.environment,self.lightcondition)
使用这些代码时,我可以上传视频文件,并使用上下文对象将信息发送到HTML文件。使用HTML的最后一层,单击“上传”按钮后,我可以显示上传的视频文件名。但是,由于views.py中的对象不见了,所以我没有保存数据的信息。单击“更新”按钮后是否有任何方法可以保留视频文件信息,这意味着需要重新加载页面?还是可以将信息从HTML文件发送到后台,例如上下文的反向版本?我尝试使用该请求,但无法访问该信息。此外,我还尝试在以下代码块中使用“会话”来保存信息。但是,它会引发错误。
保存信息:
uploaded_file = request.FILES['videofile']
request.session['videofile'] = uploaded_file
阅读信息:
uploaded_file = request.session["videofile"]