Найти - Пользователи
Полная версия: Не удается передать request в Django Form
Начало » Django » Не удается передать request в Django Form
1
Saturn
Уже столько перепробовал, но ничего не получается.
Как можно передать request в моем случае (ругается что переменная request не определена )

def mathCaptcha(request):       
    sign = random.choice("+-x")
    
    if(sign == "+"):
        num1 = random.randint(1,9)
        num2 = random.randint(1,9)
        request.session['captcha'] = num1 * num2
    else:
        num1 = random.randint(20,40)
        num2 = random.randint(1,20)
    
        if(sign == "+"):
            request.session['captcha'] = num1 + num2
        else:
            request.session['captcha'] = num1 - num2
            
    return str(num1) + sign + str(num2) + "="
class CommentForm(forms.Form):          
    name = forms.CharField(max_length=100, label='Имя', initial='Гость')
    email = forms.EmailField(required=False)
    text = forms.CharField(widget=forms.Textarea(), label='Сообщение')
    captcha = forms.CharField(label=mathCaptcha(request), validators=[validate_captcha])
fata1ex
А откуда в классе формы переменная request? Да и вообще, думается мне, в моделях request'у нечего делать, это же MVC/MVT.

Подставляйте капчу динамически во вьюшке, которая обрабатывает форму, незачем её вписывать в описание формы.
Saturn
Если я правильно понял, то картинку капчи я вывел отдельно в вьюхе, но тогда валидатор
ругается на request. Тут в основном все старания из-за валидатора.

def validate_captcha(value):
    if value != request.session['captcha']:
        raise ValidationError(u'%s неправильный ответ' % value)
class CommentForm(forms.Form):             
    name = forms.CharField(max_length=100, label='Имя', initial='Гость')
    email = forms.EmailField(required=False)
    text = forms.CharField(widget=forms.Textarea(), label='Сообщение')
    captcha = forms.CharField(validators=[validate_captcha])
fata1ex
Saturn, вам нужно ВСЮ логику работы с данными убрать во вьюшки. Всю. Модели - это просто описание ваших данных. Валидацию тоже делайте во вьюшке.
Saturn
fata1ex
У меня модели в model.py там никакой логики нету, а это я создал файл forms.py где создаю обьекты форм. А потом в вьюхе вызываю нужную форму.
fata1ex
Формы в этом случае ничем не отличаются по сути от моделей. У вас есть статические поля и динамические данные. Запихивать динамику в статические вещи - бессмыслица. Валидацию нужно менять или выносить из статики. Здесь есть варианты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB