Forms 要上载文件的django表单返回错误,因为表单无效
我正在Django开发一个应用程序。 我的用户可以通过编译这样的表单来保存数据 工具: 首字母缩略词: 定义: 由以下函数在forms.py中定义:Forms 要上载文件的django表单返回错误,因为表单无效,forms,validation,django-models,django-forms,django-views,Forms,Validation,Django Models,Django Forms,Django Views,我正在Django开发一个应用程序。 我的用户可以通过编译这样的表单来保存数据 工具: 首字母缩略词: 定义: 由以下函数在forms.py中定义: class tool_form(forms.ModelForm): class Meta: model=tool fields=["Tool", "Acronym", "Definition"] class too
class tool_form(forms.ModelForm):
class Meta:
model=tool
fields=["Tool", "Acronym", "Definition"]
class tool_file_form(forms.ModelForm):
class Meta:
model=tool_file
fields=["Tool_file", "Date"]
将数据保存到如下模型中:
class tool(models.Model):
Tool = models.CharField(max_length=256, blank=True, null=True)
Acronym = models.CharField(max_length=25, blank=True, null=True)
Definition = models.TextField(blank=True, null=True)
允许此操作的视图功能是:
def add_tool(request):
if request.method=='POST':
form = tool_form(request.POST or None)
if form.is_valid():
form.save()
messages.success(request, ("Submit succeed!"))
return redirect('adding_tools')
else:
messages.error(request, ('ERROR: submit failed'))
return render(request, 'adding_tools.html', {})
else:
return render(request, 'adding_tools.html', {})
现在我希望我的用户能够一次复制同一表单的多次。
为了实现这一点,我允许我的用户上传一个复制了要插入的数据的文件。
因此,我允许我的用户下载一个带有给定名称的列的模板xlsx文件
第1列名称(单元格A1):工具
第2列名称(B1单元格):首字母缩写
第3列名称(单元格C1):定义
要编译它,请插入许多记录,然后将其上载回。
因此,我希望我的代码将这些数据保存到之前声明的相同模型中(工具)
我正试图通过以下方式实现这一目标:
在template add_tool_sheet.html中:
<form class="container" method="POST" enctype="multipart/form-data" >
{% csrf_token %}
<div class="file-upload-wrapper" id="input-file-now">
<small id="inputHelp" class="form-text text-muted">Select file to upload.</small>
<input type="file" name="uploaded_file" id="input-file-now" data-max-file-size="5M" class="file-upload">
<br><br>
<div class="form-group">
<input name="Date" type="hidden" class="form-control" id="date_to_turn_into_toda">
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</div>
</form>
在models.py中
class tool_file(models.Model):
Tool_file = models.FileField(upload_to='uploaded_sheets/', blank=False, null=False)
Date = models.DateField(blank=False, null=False, default=timezone.now().date() )
class Meta:
ordering = ['Date', 'Tool_file']
def clean(self):
if not (self.Tool_file or self.Date):
raise ValidationError("something went wrong")
def __str__(self):
return "%s ----- [%s]" % (self.Tool_file, self.Date)
在views.py中:
def add_tool_sheet(request):
if request.method=='POST':
form = tool_file_form(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, ("upload succeeded"))
return redirect('add_tool_sheet')
else:
messages.error(request, ('ERROR n1'))
return render(request, 'add_tool_sheet.html', {})
else:
return render(request, 'add_tool_sheet.html', {})
当我试图从管理部分在模型工具_文件中添加新对象时,它起作用了
但是当我尝试从用户界面(template add_tool_sheet.html)添加新对象时,它返回
错误n1
作为消息,我的控制台返回GET/admin/HTTP/1.1“200 7381 为什么? 请注意: “从管理员上传”部分起作用,但从用户界面上传不起作用。已解决 在模板中,我把
name="uploaded_file"
但为了与forms.py和model.py中的信息匹配,必须:
name="Tool_file"
现在它工作了!
我不知道你的模板有什么问题,但是如果你想让你的用户大量从Excel文件导入数据,你不应该考虑使用一个导入工具吗?这样可以让你的用户在工具模型中直接添加新的条目,并使文件本身的上传不再需要一个单独的模型。我已经为管理部分实现了它,我认为该工具仅用于从管理部分导入数据。我从模板中没有发现使用该工具的迹象…你能给我一个使用导入导出的示例吗?你检查了链接吗?还有一个相当全面的示例,我推荐本教程来完成这一点的任务