Forms 要上载文件的django表单返回错误,因为表单无效

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

我正在Django开发一个应用程序。 我的用户可以通过编译这样的表单来保存数据

工具:

首字母缩略词:

定义:

由以下函数在forms.py中定义:

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文件导入数据,你不应该考虑使用一个导入工具吗?这样可以让你的用户在工具模型中直接添加新的条目,并使文件本身的上传不再需要一个单独的模型。我已经为管理部分实现了它,我认为该工具仅用于从管理部分导入数据。我从模板中没有发现使用该工具的迹象…你能给我一个使用导入导出的示例吗?你检查了链接吗?还有一个相当全面的示例,我推荐本教程来完成这一点的任务