我有一个django(2.0)应用程序,其页面包含两个单独的表单,这些表单根本不打算相互交互。但是,我得到一些奇怪的行为。 Pictured here,当我单击底部表单上的标签之一时,它会触发上部表单中相应(基于行,而不是名称)元素的复选框(在选定的组表单上单击“成员”人员表单上的“电子邮件”)。这只是一种方式-单击顶部窗体上的任何位置都不会影响底部窗体。选中底部窗体的实际框会触发其标签所对应的预期框。
此页面的html是:
<head>
{% load static %}
<title>LDAP - Search</title>
<link rel="shortcut icon" href="{% static 'djangoWrapper/favicon.ico' %}">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="{% static 'ldap/style.css' %}">
</head>
<body>
<h1>Search</h1>
<div class="search-form">
<h2>Search for Person</h2>
<form action="{% url 'ldap:person_results' %}" method='post'>
{% csrf_token %}
<table>
{{ personForm }}
</table>
<input type="submit" value="Search">
</form>
</div>
<div class="search-form">
<h2>Search for Group</h2>
<form action="{% url 'ldap:group_results' %}" method='post'>
{% csrf_token %}
<table>
{{ groupForm }}
</table>
<input type="submit" value="Search" />
</form>
</div>
<div class="url">
<a href="{% url 'ldap:index' %}">or go back to login</a>
</div>
</body>
表格是
class PersonSearchForm(forms.Form):
uniqname = forms.CharField(label="uniqname", max_length=10)
options = personFieldsDict.items()
attributes = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple, choices = options, label='',
required=False)
class GroupSearchForm(forms.Form):
groupName = forms.CharField(label='Group Name')
options = groupFieldsDict.items()
attributes = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple, choices = options, label='',
required=False)
呈现此页面的视图很简单:
def search(request):
personForm = PersonSearchForm()
groupForm = GroupSearchForm()
context = {'personForm': personForm, 'groupForm': groupForm}
return render(request, 'ldap/search.html', context)
我猜测这与以下两种情况有关:两种形式都使用MultipleChoiceField
小部件,但是如果它们的属性不同且不同,我看不到它们是如何相互作用的div
。为什么会有这种相互作用的任何想法?谢谢。
答案 0 :(得分:1)
您应将prefix
参数用于一种或两种形式,以防止字段相互干扰。
personForm = PersonSearchForm(prefix="person")
groupForm = GroupSearchForm(prefix="group")
在实例化表单时,别忘了也使用前缀。