Я реализую собственный чистый метод для проверки моего набора форм. Я знаю, что есть ошибка, поскольку я могу напечатать их на консоли, но эти non_form_errors() никогда не отображаются в моем шаблоне. Как я могу их отобразить?Ошибки формы для формы, не отображаемой с помощью хрустящих форм Django
template.html:
<form action="{% url 'databank:register' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="container">
<div class="row" style="margin-top: 30px">
<div class="col-md-10 col-md-offset-1">
{{ dataset_form.media }}
{% crispy dataset_form %}
<div class="authorFormset">
{% for form in formset %}
{% crispy form helper %}
{% endfor %}
</div>
{% crispy terms_form %}
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<input type="submit" class="btn btn-lg btn-success" value="Submit">
</div>
</div>
</div>
{{ formset.management_form }}
forms.py:
class BaseAuthorFormset(BaseFormSet):
def clean(self):
if any(self.errors):
return
roles = []
for form in self.forms:
contributor_role = form.cleaned_data['role']
for x in contributor_role:
if (x == "Depositor") and (x in roles):
raise forms.ValidationError("Only one Contributor may be marked Depositor.")
roles.append(x)
if "Depositor" not in roles:
raise forms.ValidationError("You must designate one Contributor as Depositor.")
def __init__(self, *args, **kwargs):
super(BaseAuthorFormset, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
class AuthorForm(forms.Form):
first_name = forms.CharField(
max_length=96,
required=True,
)
middle_initial = forms.CharField(
max_length=96,
required=False,
)
last_name = forms.CharField(
max_length = 96,
required = True,
)
email = forms.EmailField(
required = True
)
role = forms.ModelMultipleChoiceField(
queryset=AuthorRole.objects.filter(is_visible=True),
widget=forms.CheckboxSelectMultiple,
required = False,
)
affiliation = forms.CharField(
max_length=512,
required=True,
)
AuthorFormset = formset_factory(AuthorForm, formset=BaseAuthorFormset, extra=1)
class AuthorFormHelper(FormHelper):
def __init__(self, *args, **kwargs):
super(AuthorFormHelper, self).__init__(*args, **kwargs)
self.helper = FormHelper()
FormHelper.form_tag = False
FormHelper.disable_csrf = True
FormHelper.formset_error_title = "Contributor Errors"
self.layout = Layout(
Div(
Div(HTML("<h4>Contributor</h4>"),
Div(
Div('first_name', css_class='col-xs-4'),
Div('middle_initial', css_class='col-xs-4'),
Div('last_name', css_class='col-xs-4'),
css_class='row'
),
Div(
Div('affiliation', css_class='col-xs-12 col-sm-6'),
Div('email', css_class='col-xs-12 col-sm-6'),
Div(
Field(
InlineCheckboxes('role'),
),
css_class='col-xs-12 col-sm-6'),
css_class='row'
),
),
css_class = 'add_author',
id="authorFormDiv"
),
)
Ошибки показывают, как и следовало ожидать, если это ошибка «по умолчанию», как ошибки в одном из полей, но ошибки, которые я определяю в моем обычном чистом методе, не выводятся нигде. – steph
Я попробовал добавить 'cleaned_data = super (BaseAuthorFormset, self) .clean()' прямо под чистым методом, но все еще не работает ... .есть идеи?? Я действительно застрял! – steph