Django, идентифицирующая ошибку проверки не поля, связана с какой формой - PullRequest
0 голосов
/ 25 ноября 2011

Есть ли способ определения ошибки валидации, с которой связана форма для шаблона, содержащего несколько форм?

Позвольте мне объяснить сценарий. У меня есть всплывающий скрипт окна входа в систему в моем base.html

<div id="dialog1" class="window">
    <form method="post" action="/accounts/login/?next=/IW/home" id='login-form' name=login-form>{% csrf_token %}

            <div class="d-header">


                {{ form.non_field_errors }} 
                    <input type="text" name="username" id="id_username" value="" onclick="this.value=''"/><br/>
                    <input type="password" name="password" id="id_password" value="" onclick="this.value=''"/><br/>
                    <input type="hidden" name="login_form" value="1" />
                    <input type="submit" value="login" />   
            </div>          
                {% endif %} 
            </div>

    </form>
    </div>

<div id="mask"></div>
{% if form.non_field_errors %}
<script>
var maskHeight = $(document).height();
var maskWidth = $(window).width();
//Set heigth and width to mask to fill up the whole screen
$('#mask').css({'width':maskWidth,'height':maskHeight});
$('#mask').show();$('.window').show();

</script>
{% endif %}

Поскольку все остальные шаблоны расширяют базу, html всякий раз, когда возникает ошибка non_field, появляется окно входа в систему. Я хотел бы показать ошибку входа в систему только в том случае, если форма входа отправлена, а не при отправке другой формы с ошибкой, не являющейся полем.

Для этого мне нужно определить имя формы. Что-то вроде этого {% ifequal form.form_name login_form%} - Показать ошибку входа в систему. Возможно ли это?

1 Ответ

0 голосов
/ 25 ноября 2011

Они не представляют собой ничего особенного в названии «форма» в шаблоне. Это просто имя контекста по умолчанию, вы можете назвать ваши формы как угодно.

Просто назовите формы по-другому в вашем контексте:

from django.http import Http404

def detail(request, poll_id):

    # NOTE: This view code isn't really form processing code, just using it to show
    #       how you can pass different names into your template context.

    login_form = MyLoginForm()
    detail_form = MyDetailForm()

    try:
        p = Poll.objects.get(pk=poll_id)
    except Poll.DoesNotExist:
        raise Http404

    return render_to_response('polls/detail.html', {'poll': p, 'login_form': login_form, 'detail_form': detail_form})

А потом:

<div id="dialog1" class="window">         
   <form method="post" action="/accounts/login/?next=/IW/home" id='login-form' name=login-form>
       {% csrf_token %}
       <div class="d-header">
            {{ login_form.non_field_errors }}
    .
    .
    .      

Также, если вы хотите сделать несколько экземпляров одного и того же типа формы, взгляните на formsets

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