使用Django Python创建动态表单并在自定义模板表中显示

使用Django Python创建动态表单并在自定义模板表中显示,python,html,django,forms,dynamic,Python,Html,Django,Forms,Dynamic,我正在制作一个web应用程序,它将在一个表中显示一个学生列表,在每个名字旁边有一个输入字段,允许用户给该学生一个“标签”。我很难弄清楚如何将所有这些整合到一个表中 以下是我在forms.py中声明的表单: class TagsForm(forms.Form): def __init__(self, *args, **kwargs): applicants = kwargs.pop('applicants') super(TagsForm,self).__i

我正在制作一个web应用程序,它将在一个表中显示一个学生列表,在每个名字旁边有一个输入字段,允许用户给该学生一个“标签”。我很难弄清楚如何将所有这些整合到一个表中

以下是我在forms.py中声明的表单:

class TagsForm(forms.Form):
    def __init__(self, *args, **kwargs):
        applicants = kwargs.pop('applicants')
        super(TagsForm,self).__init__(*args, **kwargs)
        for i, applicant in enumerate(applicants):
            self.fields['tag_%s' % i] = forms.CharField(label=applicant)

    def tagInput(self):
        for tags in self.cleaned_data.items():
            if tags.startswith('tag_'):
                yield (tags)
然后在view.py中创建表单并将其传递到上下文:

tags_form = TagsForm(request.POST or None, applicants=applicantQuery)
if tags_form.is_valid():
    for(tags) in tags_form.tagInput():
        ...
...
context = Context({'tagsForm':tags_form, ... }
return render_to_response('review/assignment.html', context)
如您所见,我正在尝试为每个申请者创建一个字符输入“标记”字段,我将在表中显示该字段。然后在我的模板中,我有以下内容:

<form name="applicants" method="POST">
<table class="sortable" id="appTable">
<tr> 
     <th>EID</th>
     <th>Name</th>
     <th>Reviewer Tags</th>
</tr>

{% for applicant in applicants %}
<tr>
    <td> <a href="../../{{ applicant.app_id }}/overview" target="_blank">{{ applicant.app_eid }}</a></td>   

    <td> {{ applicant.app_displayName }} </td>
    <td> {{ tagsForm.tags_???}} </td>
</tr>
{% endfor %}

</table><br />
{{ tags_form.non_field_errors }}
<input type="submit" value="Submit Tags"/>
</form>

开斋节
名称
审阅者标签
{申请者%%中的申请者为%}
{{applicator.app_displayName}
{{tagsForm.tags_???}
{%endfor%}

{{tags\u form.non\u field\u errors}

我不确定如何遍历tagsForm tags字段,因为我已经遍历了申请者。我是Django/HTML新手,所以解决方案可能非常简单,但是我搜索了一下,没有找到任何人尝试这样做。谢谢你的帮助。

我不知道你为什么会在这里遇到问题。为什么您正在遍历某个对象的事实已经阻止您遍历其他对象?Django模板中的嵌套循环与任何其他编程环境中的嵌套循环一样尽可能多


在代码中不要走得太远,看起来您应该只能够对applicator.tags中的标签执行

每个申请者都有一个标签?您将它存储在哪里?在views.py中一旦我们从tagInput获得响应,它将存储在数据库表中。在它自己的表中?他们有关系吗?标记似乎应该是m2m关系,在这种情况下,您可以简单地使用一个标记。我的意思是,这不是我真正遇到的问题,我在模板文件中显示输入字段时遇到了问题。它不适用于嵌套for循环。假设有X个学生。我们最终会为每个studentOK创建X个输入字段,我误解了,对不起。那样的话,我想你是走错了路。Django有一种方法可以显示任意数量的子表单,每个子表单对应一个条目,这就是。太棒了!是的,我想我有一些设计问题。谢谢你的帮助。