问题描述
您好,我现在尝试提交未保存数据的表单时,尝试使用Django模型表单。我可以寻求帮助吗?我不知道该实现的错误之处:
下面的代码:models.py
class Videos(models.Model):
lecturer = models.CharField(max_length=100,blank=False,null=False)
module = models.CharField(max_length=100,null=False)
video = models.FileField(upload_to='lectures/')
date = models.DateField(default=datetime.datetime.Now())
下面的代码:form.py
class LectureVideos(forms.ModelForm):
class Meta:
model= Videos
fields = '__all__'
以下代码:view.py
def LectureVideoForm(request):
form = LectureVideos()
if form.is_valid():
form.save()
return redirect('upload-success')
return render(request,'forms.html',{'form':form})
以下代码:forms.html
<!DOCTYPE html>
<html lang="en">
<head>
<Meta charset="UTF-8">
<Meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Upload</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Upload Video">
</form>
</body>
</html>
解决方法
您从未将数据传递给表单。如果有POST请求,则将request.POST
(和request.FILES
)传递给以下形式:
def LectureVideoForm(request):
if request.method == 'POST':
form = LectureVideos(request.POST,request.FILES)
if form.is_valid():
form.save()
return redirect('upload-success')
else:
form = LectureVideos()
return render(request,'forms.html',{'form':form})
注意:函数通常以 snake_case 而不是 PerlCase 编写,因此 建议将函数重命名为
lecture_video_form
,而不是。LectureVideoForm