我正在Django框架中尝试上传一个模型文件。
class banner(models.Model):
#id is made by Django
name = models.CharField(max_length=255)
created_by = models.CharField(max_length=255)
company = models.CharField(max_length=255)
register_date = models.DateField(auto_now_add=True)
file = models.FileField(null=True, blank=True)
file_name = models.CharField(max_length=255)
这是一个模型:
class BannerForm(forms.Form):
name=forms.CharField(max_length=255)
created_by=forms.CharField(max_length=255)
company=forms.CharField(max_length=255)
data_type=forms.CharField(max_length=255)
register_date=forms.DateField()
file=forms.FileField()
file_name=forms.CharField(max_length=255)
其形式如下:
def add_form(request):
form=BannerForm()
last=models.banner.objects.all().last()
if request.method == "POST":
form = forms.BannerForm(request.POST, request.FILES or None)
if form.is_valid():
form.cleaned_data['created_by']
new_banner=models.banner()
new_banner.id=last.id+1
new_banner.name=form.cleaned_data['name']
new_banner.register_date=form.cleaned_data['register_date']
new_banner.company=form.cleaned_data['company']
new_banner.file=form.cleaned_data['file']
new_banner.file_name=new_banner.file.name
new_banner.created_by=form.cleaned_data['created_by']
new_banner.save()
return render(request, "add_banner.html",{"form":form})
这就是风景。
现在每次我试图添加一个横幅,我浏览文件,但在我点击“提交”后,它是该文件必须选择,像它不承认我浏览到的表单按钮。
3条答案
按热度按时间icomxhvb1#
你需要在你的模型中指定上传路径
并确保在www.example.com中定义了
MEDIA_ROOT
和MEDIA_URL
settings.py以你的形式
lymnna712#
您需要在表单定义中包含
enctype="multipart/form-data"
。tuwxkamq3#
尝试类似这样的操作:
Models.py :
forms.py :
views.py :
就像我说过的,别忘了:
您不必指定以下内容:
new_banner.register_date=form.cleaned_data['register_date']
-〉无用,因为在模型中设置了auto_now_add = True,所以不需要在HTML表单中创建字段。注意:如果你的字段
created_by = models.CharField(max_length=255)
是要放置一个现有的用户,那么你应该做一个外键字段如下: