Форум сайта python.su
Всем доброго дня. Столкнулся с проблемкой:
Имея унаследованную модель
class ExtendetUser(User): active = models.NullBooleanField() active_link = models.CharField(max_length=20, verbose_name=u'Ключ активации', blank=True)
class MExtendetUserForm(ModelForm): username = forms.CharField(max_length=30, label = u'Никнейм', required = False) first_name = forms.CharField(max_length=30, label = u'Имя', required = False) last_name = forms.CharField(max_length=30, label = u'Фамилия', required = False) email = forms.EmailField(label = u'Email', required = False) class Meta: model = ExtendetUser fields = ('first_name', 'last_name', 'email')
user = ExtendetUser.objects.get(id=1) form = MExtendetUserForm(instance=user)
Офлайн
Diaspors
form.is_valid() - говорит, что falce, хотя я четко в форме прописал что required = False
А form.errors говорит {}.
Офлайн
Может я не стой стороны пытаюсь понять! Но…:
print form.as_ul()
Офлайн
DiasporsПример. Редактирование профиля.
Расписывает заполненные поля… как так получается, что данные не передались ?
form = MExtendetUserForm(instance=user)
form = MExtendetUserForm(data=request.POST)
Отредактировано Chern (Май 30, 2012 10:51:07)
Офлайн
Chern пасибо, это доступно понятно и это все работает!
Я начинающий и поэтому не совсем понимаю, почему я не могу использовать такой сценарий:
при:
form = MExtendetUserForm(instance=user)
form = MExtendetUserForm(request.POST) if request.method == 'POST' and form.is_valid(): user_ch = MExtendetUserForm( id=request.user.id, first_name=form.cleaned_data['first_name'], last_name=form.cleaned_data['last_name'], email=form.cleaned_data['email'], ) user_ch.save()
Офлайн
Вообще же как по документации должно быть еще проще:
form = MExtendetUserForm(request.POST) if request.method == 'POST' and form.is_valid(): form.save()
Офлайн
Смешались в кучу кони, люди (с) :)
Самый банальный пример для понимания
if request.method == 'POST': # В качестве первого параметра(он же form.data впоследствии) указываем POST. # Именно эти данные будут валидироваться form = MExtendetUserForm(request.POST) if form.is_valid(): new_user = form.save() else: # Здесь мы инициализируем данные, чтобы впоследствии они к нам вернулись # Используем related_name (extendetuser) созданный при наследовании. form = MExtendetUserForm(instance=request.user.extendetuser) # В данном случае поле data - пустой словарь, соответственно валидировать нечего
Отредактировано Chern (Май 30, 2012 12:18:03)
Офлайн
DiasporsОбъясняю на пальцах.
Вообще же как по документации должно быть еще проще:form = MExtendetUserForm(request.POST) if request.method == 'POST' and form.is_valid(): form.save()
form = MyForm(instance=some_object)
form = MyForm(instance=some_object)
form = MyForm(instance=some_object, request.POST)
Отредактировано FishHook (Май 30, 2012 12:19:58)
Офлайн
Ну вот теперь когда разжевано, теперь понятно! Всем спасибо!
Офлайн