Python Django:我们可以改变filefield,这样当选择一个文件时,它会立即被上传吗

Python Django:我们可以改变filefield,这样当选择一个文件时,它会立即被上传吗,python,html,django,file-upload,Python,Html,Django,File Upload,我只是想知道:是否有可能改变文件字段,这样当选择一个文件时,它会立即被上传,而不需要额外的按钮 假设我成功导入了.models、.forms、url.py等的所有内容 models.py中的代码 class data(models.Model): Datas = models.FileField(upload_to='datas/upload') class form1(forms.ModelForm): class Meta: model = data

我只是想知道:是否有可能改变文件字段,这样当选择一个文件时,它会立即被上传,而不需要额外的按钮

假设我成功导入了.models、.forms、url.py等的所有内容

models.py中的代码

class data(models.Model):
    Datas = models.FileField(upload_to='datas/upload')
class form1(forms.ModelForm):
    class Meta:
        model = data
        fields = ('Datas',)
def upload(request):
    if request.method == 'POST' and 'btnform1' in request.POST:
        newform1 = form1(request.POST, request.FILES)
        if newform1.is_valid():
            newform1.save()
            return redirect('list')
<h2>Data</h2>
     <form method="post" enctype="multipart/form-data"> {% csrf_token %}
     {{newform1.as_p}}
<!--        <button type="submit" class="btn btn-primary" name="btnform1">Upload Data</button>-->
     </form>
表单中的代码.py

class data(models.Model):
    Datas = models.FileField(upload_to='datas/upload')
class form1(forms.ModelForm):
    class Meta:
        model = data
        fields = ('Datas',)
def upload(request):
    if request.method == 'POST' and 'btnform1' in request.POST:
        newform1 = form1(request.POST, request.FILES)
        if newform1.is_valid():
            newform1.save()
            return redirect('list')
<h2>Data</h2>
     <form method="post" enctype="multipart/form-data"> {% csrf_token %}
     {{newform1.as_p}}
<!--        <button type="submit" class="btn btn-primary" name="btnform1">Upload Data</button>-->
     </form>
视图中的代码.py

class data(models.Model):
    Datas = models.FileField(upload_to='datas/upload')
class form1(forms.ModelForm):
    class Meta:
        model = data
        fields = ('Datas',)
def upload(request):
    if request.method == 'POST' and 'btnform1' in request.POST:
        newform1 = form1(request.POST, request.FILES)
        if newform1.is_valid():
            newform1.save()
            return redirect('list')
<h2>Data</h2>
     <form method="post" enctype="multipart/form-data"> {% csrf_token %}
     {{newform1.as_p}}
<!--        <button type="submit" class="btn btn-primary" name="btnform1">Upload Data</button>-->
     </form>
upload.html中的代码

class data(models.Model):
    Datas = models.FileField(upload_to='datas/upload')
class form1(forms.ModelForm):
    class Meta:
        model = data
        fields = ('Datas',)
def upload(request):
    if request.method == 'POST' and 'btnform1' in request.POST:
        newform1 = form1(request.POST, request.FILES)
        if newform1.is_valid():
            newform1.save()
            return redirect('list')
<h2>Data</h2>
     <form method="post" enctype="multipart/form-data"> {% csrf_token %}
     {{newform1.as_p}}
<!--        <button type="submit" class="btn btn-primary" name="btnform1">Upload Data</button>-->
     </form>
数据
{%csrf_令牌%}
{{newform1.as_p}}

如果可能的话,有谁能指导我并给出一个解决方案?谢谢。

为此,您不需要在后端更改任何内容,只需要一个javascript片段来触发文件字段按钮的“更改时提交表单”事件。 假设您的输入文件字段具有id=“id\u file”和form id=“image upload form”

如果您的html看起来像

<form id="image-upload-form" method="POST" role="form" enctype="multipart/form-data">
    {% csrf_token %}
    <input name="id_Datas" type="file" id="id_datas">
    <button type="submit" class="btn btn-primary" name="btnform1">Upload</button>
</form>
解释:

请参阅,当您的html中有一个表单时,表单角色是收集其中输入元素的数据,并包装这些数据,并在定义的操作上采用表单中定义的必要方法,即“GET”、“POST”等,该操作类似于“/upload\u file”

现在,默认情况下,只有当用户单击表单中包含类型为submit的button元素时,表单才会执行此操作。由于您不希望用户必须单击此行为,因此您也可以通过javascript执行此操作,如果您使用上面定义的html,那么为了测试此行为,您可以在文件上载选项中选择文件,然后转到开发人员控制台并运行 这个

当您单击按钮时,也会看到相同的行为。因此,我们在
change
事件上执行此操作,以便在用户选择文件时自动提交表单


希望这有帮助,如果没有那么让我知道哪一部分

对不起,我还是不太明白。。。你介意更深入地解释一下吗?添加了一些解释,我希望你使用的是jquery。对不起,最后一个问题。文件上传到哪里?媒体文件夹中应该有一个文件夹,这是通过上传到class='datas/upload'控制的。哦,好的,我明白你的意思了。非常感谢。