Как сделать проверку формы в Django динамической? - PullRequest
0 голосов
/ 27 мая 2010

Я пытаюсь создать форму, которая обрабатывает проверку домена: форма должна завершиться сбоем на основе переменной, которая была установлена ​​ранее в другой форме.

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

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

Я пытался сделать динамическую перегрузку <strong>init</strong>, но не смог найти способ, чтобы передать мой переданный переменный в чистую функцию.

Я читал, что эта динамическая проверка может быть выполнена с использованием заводского метода, но, возможно, кто-то может мне помочь с этим?

Вот упрощенная версия формы:

#OrderFormStep1 presents the user with a choice: create or move domain

class OrderFormStep2(forms.Form):

    domain = forms.CharField() 
    extension = forms.CharField() 

    def clean(self):
       cleaned_data = self.cleaned_data
       domain = cleaned_data.get("domain")
       extension = cleaned_data.get("extension")

       if domain and extension:

       code = whoislookup(domain+extension);

       #Raise error based on result from OrderFormStep1
       #raise forms.ValidationError('error, domain already exists')
     #raise forms.ValidationError('error, domain does not exist')

       return cleaned_data

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Переопределение __init__ - это путь. В этом методе вы можете просто установить значение переменной экземпляра.

def __init__(self, *args, **kwargs):
    self.myvalue = kwargs.pop('myvalue')
    super(MyForm, self).__init__(*args, **kwargs)

Теперь self.myvalue доступен в любой форме.

0 голосов
/ 27 мая 2010

У вас есть модель, которая хранит домены? Если это так, вы хотите использовать ModelForm и установить unique = True для любого поля, в котором хранится фактический домен в модели. Начиная с Django 1.2, вы можете даже выполнять дополнительную проверку внутри модели, а не в форме.

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