首页 文章

在formset和一个列表中同时循环表单FileField需要错误:django

提问于
浏览
0

我有一个formset,我在视图中初始化它 . 其中一个形式's fields is FileField. and I have to show user the name of his/her previous file name. Because i can' t初始化FileField,我想在列表中发送文件名 . (我的意思是,例如当你有一个Charfield时,你可以在视图中初始化它,当你渲染到模板时,你会看到一个填充了该数据的输入,但是当你有文件上传字段时,你可以_2980457知道我怎么能循环另外一种情况是我在formset中初始化表单并渲染到模板(我的意思是写例如 data['form-0-Team']='team1' 但是我不能写 data['form-0-Team']='a.png' ,所以当我渲染到模板时,我看到填充了名为'Team'的字段(value = team1),并且未填写名为'File'的字段并显示错误'thid field is required' . 虽然它's the first time i'访问此页面并且我的方法不是't POST. (USUALLY form errors are shown when user clicks on submit and in views it checks if request.method == ' POST',然后检查是否是form.is_valid,它返回到模板并显示错误,但在我的情况下,它会在euser第一次访问页面时以及在他/她发布数据之前显示错误 . 我希望我能说出我的问题 . 你能指导我解决这个问题吗?真的感谢 .

def myFunc(request):
    flagFormSet = formset_factory(FlagFileBaseForm)
    if request.method == 'POST':
        formset = flagFormSet(request.POST, request.FILES)
        if formset.is_valid():
          # do s.th
    else:
         data = {
                    'form-TOTAL_FORMS': 5,
                    'form-INITIAL_FORMS': u'0',
                    'form-MAX_NUM_FORMS': u'',
                    # add initial form data to it
                }
         list=['a.png', 'b.png', 'c.png', 'd.png' , 'f.png']

         formset = flagFormSet(data)
    return render_to_response('myPage.html', RequestContext(request, { 'formset': formset, 'list':list}))

和我的模板:

<form method="post" action="" enctype="multipart/form-data">
{{ formset.management_form }}
    {% for form in formset.forms %}
        <div class="form">
           <div class="form-row Team">
              <div>
                <label class="required" for="id_Team">Team:</label>
                    {{ form.Team }}
                    {{ form.Team.errors }}
              </div>
           </div>                           
           <div class="form-row File">
               <div>
                  <label class="required" for="id_File">File:</label>
                       {{ form.File }}
                       {{ form.File.errors }}
               </div>

    #here i want show the name of previous file

           </div>
        </div>
    {% endfor %}
</form>

编辑:当前结果(请求不发布,显示错误)
enter image description here

期望的结果(表单没有文件名错误)
enter image description here

2 回答

  • 1

    在Django模板中,如果您尝试呈现具有FileField的表单 . 你必须通过替换

    <form method="post" action="">
    

    <form method="POST" enctype="multipart/form-data">
    

    https://docs.djangoproject.com/en/dev/ref/forms/api/#binding-uploaded-files-to-a-form

  • 0

    我担心我真的不明白你的问题,所以如果这没有帮助就道歉......

    如果你的列表是任意的(从你的问题看起来),那么你可以使用内置forloop counter的django构建你的文件名 -

    {% for form in formset %}
        {{ form }}
        <input type="text" name="file_name" value="{% forloop.counter %}.png">
    {% endfor %}
    

    或者看看python的zip function . 您可以使用它来构建包含名称和表单的对象,并将其传递给模板 .

相关问题