Django добавить пользовательскую проверку в поле выбора в форме - PullRequest
0 голосов
/ 18 марта 2019

У меня есть форма модели, скажем,

models.py
Y_N = (('Y', 'Yes'), ('N', 'No'))
M_A = (('M', 'Man'), ('A', 'Auto'))

class Test(models.Model):
    feild1 = models.CharField(max_length=1, choices=Y_N, default='Y', db_index=True)
    feild2 = models.CharField(max_length = 1, choice=M_A, default = 'M')
forms.py
class TestForm(ModelForm):
    class Meta:
        model = Test
        feilds = ['feild1', 'feild2']

Теперь в шаблоне я добавляю еще одно значение выбора «Не обновлять», значение которого равно 0. Итаккак я могу справиться с этим 'Select a valid choice. 0 is not one of the available choices.'.Мне нужно отправить эту форму, если значение поля равно 0 или «Y» или «N».

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Это нужно сделать в Form.Вы можете переопределить метод clean, например, или в этом случае только конкретный метод clean_FOO:

class TestForm(ModelForm):

    class Meta:
        ... # same as before

    def clean(self):
        cleaned_data = super().clean()
        if self.errors.get('field1') and self.data.get('field1') == '0':
            # we know the error is because submitted data doesn't match model options
            del self._errors['field1']  # error on field1 removed
        return cleaned_data  # note cleaned_data won't contain 'field1' so it won't save it.
0 голосов
/ 18 марта 2019

Вы добавляете (0, "Don't update") к Y_N, так что это правильный выбор.

...