2015-02-16 2 views
0

Я следовал учебник по этой ссылке, и это работает прекрасно:Доступ к очищенным данным формы с обратного вызова сигналов?

http://johnparsons.net/index.php/2013/06/28/creating-profiles-with-django-registration/

Моя единственная проблема, однако, эта строка из метода user_registered_callback:

profile.is_human = bool(request.POST["is_human"]) 

Поскольку это доступ запрос переменная напрямую (если вы удалите функцию bool).

Как это сделать, чтобы значение, которое я передаю своей модели, уже проверено ссылочной формой?

ответ

1

Экземпляр форма не передается на этот сигнал, так что я боюсь, что вы должны еще раз проверить данные:

def user_registered_callback(sender, user, request, **kwargs): 

    form = ExRegistrationForm(request.POST) 
    form.full_clean() 

    profile = ExUserProfile(user=user) 
    profile.is_human = form.cleaned_data['is_human'] 
    profile.save() 
+0

Я сделал это, но, к сожалению, проверка is_valid() всегда возвращает значение False, так как имя пользователя и электронная почта будет дублироваться на этом этапе. Я думаю, избыточно ли очищать переменные POST, так как мы не дойдем до этой части приложения, если они не пройдут первую проверку? – DigitalDouble

+0

Вы вызываете 'full_clean()' не для целей проверки. Насколько я понимаю, в этом обратном вызове не требуется имя пользователя/адрес электронной почты. Вы просто хотите получить чистую ценность поля 'is_human'? Если да, то 'form.full_clean()' делает именно то, что вам нужно. Да, это уродливое решение, но я не вижу другого пути. – catavaran

+0

Извините, что забыл упомянуть, что форма, которую я продюсирую, не является ModelForm. Кажется, что full_clean доступен только для модельных форм. – DigitalDouble