Форум сайта python.su
Добрый день, господа форумчане!
Как вы наверняка догадались, я начинающий джанго-программист. Прочитал книгу Django подробное руководство. Выполнил тутор с сайта. Теперь пытаюсь сделать простенький собственный проект в качестве обучения.
Возникают вопросы, ответы на которые найти “легко” не получается. Проясните пожалуйста, если вас не затруднит.
Первые вопросы по форме создания пользователя UserCreationForm. Если экземпляр этого класса вывести в шаблон сразу, то шаблон отобразит три поля, ник и два пароля. Если же этот класс переопределить так (именно так в три строчки):
class UserCreateForm(UserCreationForm): class Meta: model = User
class UserCreateForm(UserCreationForm): email = forms.EmailField(required = True, error_messages = {'invalid': 'Введите корректный адрес электронной почты'}) class Meta: model = User fields = ( "username", "email") def save(self, commit = True): user = super(UserCreationForm, self).save(commit = False) user.email = self.cleaned_data["email"] if commit: user.save() return user
Отредактировано Mike67 (Май 20, 2014 13:06:07)
Офлайн
Ответ 0: Для джанги есть соответсвующая ветка форума
Ответ 1: Метой же
Ответ 2: Этот код вообще некорректен, def save помещенный в Meta работать не будет, если сделать по-нормальному, то очевидно, что email Вы отделили от пользователя, вынеся его самостоятельным филдом, теперь надо назад поставить в соответствие.
Офлайн
FishHook0: ой да промахнулся, Модераторам послал просьбу перекинуть
Ответ 0: Для джанги есть соответсвующая ветка форумаОтвет 1: Метой жеОтвет 2: Этот код вообще некорректен, def save помещенный в Meta работать не будет, если сделать по-нормальному, то очевидно, что email Вы отделили от пользователя, вынеся его самостоятельным филдом, теперь надо назад поставить в соответствие.
Отредактировано Mike67 (Май 20, 2014 13:29:25)
Офлайн
1. В у Меты помимо модели есть куча других параметров. Ну, например
class AuthorForm(ModelForm): class Meta: model = Author fields = ('name', 'title', 'birth_date') labels = { 'name': _('Writer'), } help_texts = { 'name': _('Some useful help text.'), } error_messages = { 'name': { 'max_length': _("This writer's name is too long."), }, }
Офлайн
Спасибо за ответы
1) C метой стало яснее. грубо говоря метой сбросил я настройки по умолчанию
2) Ответ я понял дословно. Но вот что практически я получаю:
Мое представление:
def register(request): form = UserCreateForm(request.POST or None) if form.is_valid(): username = form.clean_username() password = form.clean_password2() form.save() user = authenticate(username = username, password = password) #return render_to_response("printerror.html", locals()) if user.is_active: login(request, user) return HttpResponseRedirect('/') return render_to_response("register.html", {'form':form}, context_instance = RequestContext(request))
class UserCreateForm(UserCreationForm): email = forms.EmailField(required = True, error_messages = {'invalid': 'Введите корректный адрес электронной почты'}) class Meta: model = User fields = ( "username", "email") #def save(self, commit = True): # user = super(UserCreationForm, self).save(commit = False) # user.email = self.cleaned_data["email"] # if commit: # user.save() # return user
form = AuthenticationForm(data = request.POST) if form.is_valid(): user = form.get_user() if user.is_active: login(request, user) return HttpResponseRedirect('/') return render_to_response('login.html', {'form':form}, context_instance = RequestContext(request))
Отредактировано Mike67 (Май 20, 2014 14:34:03)
Офлайн
с проблемой аутентификации разобрался. Работает и с save и без него, без видимых отличий- отсюда и не понятно зачем он нужен.
Офлайн