【问题标题】:Django/Python control: "if form.is_valid ():" is equal to false if the form has an input type "button"Django/Python 控件:“if form.is_valid():”如果表单具有输入类型“按钮”则等于 false
【发布时间】:2013-05-18 22:40:14
【问题描述】:

我不明白为什么我的 html 页面中有一个表单:<input type="submit" class="btn btn-small btn-primary" id="execute" value="Esegui">`

那么表格是有效的,否则如果我放一个 <input class="btn btn-small btn-primary" type="button" id="execute" value="Esegui"> 表格无效。 问题是,如果我将提交作为“输入类型”,则无法加载 JSON 的代码:

<script type="text/javascript">
$(document).ready(function () {
    $("a # single_image").fancybox();
    $("# execute").click(function () {
        var execute = true
        $("# execute").attr("value", "Run ...");
        $("# single_image.") attr("href", "");
        $("# image").attr("src", "");

        $.ajax({
            type: "POST",
            url: "/ cloud / carica_immagine"
            date: {
                execute: execute
            }
        }).done(function (msg) {
            $("# execute").attr("value", "Run");
            $("# single_image.") attr("href", "graphs /" + msg["user_id"] + "/" + msg["graph"] + ."png");
            $("# image").attr("src", "graphs /" + msg["user_id"] + "/" + msg["graph"] + ."png");
            $("# single_image.") trigger("click");
        });
    });
})
</ script>.

这是我被html页面调用的视图:

def list(request):
    # Handle file upload
    documents = Document.objects.all()
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile = request.FILES['docfile'])
            print newdoc.docfile
            newdoc.save() 
            ...
            ...
            return render_to_response('processa_immagine.html', {'documents':documents, 'form': form, 'user_id':request.session['user_id'],'graph':graph}, RequestContext(request))

    else:
        form = DocumentForm() # A empty, unbound form        

    # Render list page with the documents and the form
    return render_to_response('processa_immagine.html', {'documents':documents, 'form': form}, RequestContext(request))

这是我的表格:

class DocumentForm(forms.Form):
    docfile = forms.FileField(
        label='Seleziona un file',help_text='massimo 42 megabytes',
    )

这是我的模型:

class Document(models.Model):
    docfile = models.FileField(upload_to='documents')

我的页面html表单是:

<form method="post" id="myform" enctype="multipart/form-data">
  <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }} </p>
  <p>{{ form.docfile }}</p>             
  <input class="btn btn-small btn-primary" type="button" id="execute" value="Esegui"><br/> 
</form>

我希望有人帮助我。 提前致谢。

【问题讨论】:

  • 你也可以缩进 JavaScript 代码。
  • 使用&lt;input type=button,您实际上并没有提交表单。您需要显式调用.submit()。因此错误
  • 我该怎么办?我应该把它放在以下表格中:
    及以下函数 js:

标签: javascript html django json python-2.7


【解决方案1】:

这段代码很混乱。您已经在单击事件触发的按钮上定义了一个 Ajax 函数。因此,当您单击按钮时,会触发该功能,并尝试提交表单。但是,它不能以使表单有效的方式这样做:表单中的唯一字段是必需的 FileField,不能通过标准的 Ajax POST 提交 - 即使可以,您的 Ajax 函数也不会尝试实际上包括它。

input 版本之所以能正常工作是因为 Javascript 并没有阻止默认的提交动作,所以过程是这样的:Ajax 已经运行,但在它有机会收到响应之前,整个页面被提交,并以(有效)表单提交的结果刷新。

【讨论】:

  • 事实上,我想了解如何提交表单,同时通过“执行”按钮使用 JSON 进行调用。
  • 正如我所说,您不能这样做,因为您正在尝试提交文件。
  • 我有兴趣上传图像,通过视图进行更改,然后显示它。有没有办法?
  • 那又怎样?没有人可以帮助我吗?我需要知道是否有一种方法可以让我执行提交表单并同时通过 Javascript 打开图像。
  • 没有人可以帮助你,因为没有人知道你要做什么。您是什么意思,在提交表单的“同时”打开图像?为什么不能提交表单然后在返回的页面上显示图像?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2019-11-26
  • 2020-04-06
  • 2014-01-10
  • 2020-05-09
  • 1970-01-01
相关资源
最近更新 更多