django clean_field, которое ссылается на другие поля - PullRequest
4 голосов
/ 31 июля 2010

У меня есть ситуация, когда пользователь может щелкнуть поле флажка «field_enable» в html-форме, и хорошая операция jQuery отобразит другое поле «fielda», чтобы пользователь мог ввести больше данных. Когда » field_enable "проверено, я хочу, чтобы пользователь также заполнил" fielda ". Когда «field_enable» не отмечено, пользователю должно быть разрешено отправлять форму без ошибок.

Я хочу, чтобы все ошибки отображались в списке ошибок над полем, а не в списке form.errors для общей формы (поэтому я не использую метод clean () формы). Поэтому я придумал этот код ниже.

Логика включения / выключения прекрасно работает. Когда «field_enable» отмечен, пользователь должен заполнить «fielda», а когда он не отмечен, пользователь проходит дальше. Однако, когда флажок установлен, требуя, чтобы пользователь заполнил больше информации, даже если они заполняют значение для «fielda», они все равно получают ошибку проверки «Fielda обязательна». Это не поддается ожиданиям.

Кто-нибудь советует, почему «fielda» всегда не проходит проверку всякий раз, когда проверяется «field_enable»

class MyForm(forms.ModelForm):

    def clean_fielda(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("field_enable"):
            raise forms.ValidationError("Fielda is required")
        return cleaned_data['fielda']

Пример модели

class MyModel(models.Model):
    field_enable = models.BooleanField(default=False)
    fielda = models.CharField(max_length=128, blank=True, null=True)

Любая помощь очень ценится!

Джо

1 Ответ

5 голосов
/ 31 июля 2010

Вы хотите вызвать ошибку проверки, если «field_enable» был отмечен и , что у вас нет значения для «field_a». Вот так (вам не хватает проверки «field_a»):

class MyForm(forms.ModelForm):

    def clean_fielda(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("field_enable") and not cleaned_data.get('field_a'):
            raise forms.ValidationError("Fielda is required")
        return cleaned_data['fielda']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...