Ошибки шаблона формы Django - PullRequest
0 голосов
/ 30 ноября 2011

Я написал себе форму:

class Autopoweroff_Form(forms.Form):
    autopoweroff_groups = forms.CharField(required=True)
    autopoweroff_groups_hosts = forms.CharField(required=True)
    autopoweroff_groups_start = forms.CharField(required=True)
    autopoweroff_groups_end = forms.CharField(required=True)
    autopoweroff_groups_startup_delay = forms.CharField(required=True)
    autopoweroff_groups_idle_time = forms.CharField(required=True)

Теперь я знаю, что мне не пришлось бы явно устанавливать reuqired = True, но перенесите это, пожалуйста.В любом случае, давайте нажмем.

Теперь, так как я ненавижу делать проверку и так далее в представлении, я просто определил функцию обновления для этой формы:

    def update(self, data):
        if not self.is_bound and data is not None:
            raise Exception()

        if self.is_valid():
            curr_group = self.cleaned_data['autopoweroff_groups']
            ...

, а затем, по моему мнению, вызовите еенапример, так:

if request.method == 'POST':
        form = Autopoweroff_Form(data=request.POST)
        form.update(data=request.POST)
        return HttpResponseRedirect('/admin/thin/create_autopoweroff')
    else:
        form = Autopoweroff_Form()

    ...

Теперь проблема в том, что если я ничего не наберу в форме, форма будет возвращена как есть, без каких-либо ошибок, как это должно быть.Я также знаю, что он ничего не будет делать, потому что:

https://docs.djangoproject.com/en/1.3/ref/forms/validation/

Фактически, Django в настоящее время полностью уничтожит словарь cleaned_data, если в форме есть какие-либо ошибки.Тем не менее, это поведение может измениться в будущем, так что в первую очередь это не плохая идея убирать за собой.

, если я попытаюсь:

def update(self, data):
        if not self.is_bound and data is not None:
            raise Exception()

        if self.is_valid():
            curr_group = self.cleaned_data['autopoweroff_groups']
            ...
        else:
            print self.errors

Iполучить ошибки, которые мне хотелось бы видеть в шаблоне.Я также уже попробовал:

def clean_autopoweroff_groups(self):
        autopoweoff_groups = self.cleaned_data.get('autopoweroff_groups', "")
        if autopoweoff_groups == '':
            print "Validation Error"
            raise forms.ValidationError('Please Enter A Name')
        return autopoweroff_groups

Что именно я делаю не так?

ОБНОВЛЕНИЕ: на мой взгляд:

    if request.method == 'POST':
        form = Autopoweroff_Form(data=request.POST)

        if form.is_valid():
            form.update(data=request.POST)
            return HttpResponseRedirect('/admin/thin/create_autopoweroff')
    else:
        form = Autopoweroff_Form()

и в моей форме удалите, если self.is_valid ()

1 Ответ

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

Django имеет встроенную проверку, поэтому вам не нужно переписывать его:

class Autopoweroff_Form(forms.Form):
    # I suggest not prefixing your fields with the name of the class
    groups = forms.CharField(required=True)
    hosts = forms.CharField(required=True)
    start = forms.CharField(required=True)
    end = forms.CharField(required=True)
    delay = forms.CharField(required=True)
    idle_time = forms.CharField(required=True)

и, по вашему мнению:

if request.method == 'POST':
    form = Autopoweroff_Form(data=request.POST)
    if form.is_valid():
        return HttpResponseRedirect('/admin/thin/create_autopoweroff')
else:
    form = Autopoweroff_Form()

обратите внимание, что вы вызываете is_valid () впредставление, а не форма.

Если вы хотите выполнить более сложную проверку либо для отдельных полей, либо для группировки полей, вы можете перезаписать методы форм clean() и clean_[field_name]().

Смотрите здесь:

https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

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