Джанго формы взаимодействуют друг с другом - PullRequest
0 голосов
/ 03 июля 2018

У меня есть приложение django (2.0) со страницей, которая содержит две отдельные формы, которые вообще не предназначены для взаимодействия друг с другом. Тем не менее, я получаю странное поведение. Изображено здесь , когда я нажимаю на одну из меток в нижней форме, она вызывает флажок для соответствующего (основанного на строке, а не имени) элемента в верхней форме (нажимая «члены» в группе Форма выбрана "Электронная почта" на форму лица). Это происходит только в одном направлении - нажатие в любом месте верхней формы никогда не влияет на нижнюю форму. Проверка фактических блоков нижней формы вызывает ожидаемые поля, которым соответствуют их метки.

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 s. Любая идея о том, почему существует это взаимодействие? Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Вы должны использовать аргумент prefix для одной или обеих форм, чтобы не допустить взаимного интерференции полей.

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

Не забудьте также использовать префиксы при создании экземпляра формы в записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...