Django表单彼此交互

时间:2018-07-03 15:57:23

标签: python html django forms

我有一个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。为什么会有这种相互作用的任何想法?谢谢。

1 个答案:

答案 0 :(得分:1)

您应将prefix参数用于一种或两种形式,以防止字段相互干扰。

personForm = PersonSearchForm(prefix="person")
groupForm = GroupSearchForm(prefix="group")

在实例化表单时,别忘了也使用前缀。