Я пытаюсь создать веб-сайт, используя 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"]