Форум сайта python.su
люди добрые, помогите пожалуйста разобраться с типовой задачей для формы
есть форма, связанная с БД. необходимо чтобы при первой загрузке поля были заполнены соответствующими значениями из БД(каждому поле соответствует определённая ячейка таблицы). после того как пользователь изменит значение полей в форме и отошлёт её, обновляются данные в БД
эту задачу я решил так:
фрагмент из views.py:
@login_required def personal_data_page(request): if request.method == 'POST': form = PersonalDataForm(request.POST) if form.is_valid(): entry_user = User.objects.get(username__exact=request.user.username) entry_user_profile = UserProfile.objects.get(user_ptr_id__exact=entry_user.id) entry_user_profile.family = form.cleaned_data.get('family') entry_user_profile.name1 = form.cleaned_data.get('name1') entry_user_profile.name2 = form.cleaned_data.get('name2') entry_user_profile.nickname = form.cleaned_data.get('nickname') entry_user_profile.gender = form.cleaned_data.get('gender') entry_user_profile.status = form.cleaned_data.get('status') entry_user_profile.city = form.cleaned_data.get('city') entry_user_profile.phone = form.cleaned_data.get('phone') entry_user_profile.skype = form.cleaned_data.get('skype') entry_user_profile.email_address = form.cleaned_data.get('email_address') entry_user_profile.other = form.cleaned_data.get('other') entry_user_profile.save() return HttpResponseRedirect('/userprofile/personal_data_page_changed/') else: entry_user = User.objects.get(username__exact=request.user.username) entry_user_profile = UserProfile.objects.get(user_ptr_id__exact=entry_user.id) arg = { 'family': entry_user_profile.family, 'name1': entry_user_profile.name1, 'name2': entry_user_profile.name2, 'nickname': entry_user_profile.nickname, 'gender': entry_user_profile.gender, 'status': entry_user_profile.status, 'city': entry_user_profile.city, 'phone': entry_user_profile.phone, 'skype': entry_user_profile.skype, 'email_address': entry_user_profile.email_address, 'other': entry_user_profile.other, } form = PersonalDataForm(arg) t = loader.get_template('personal_data_page.html') c = RequestContext(request, { 'form': form, }, [custom_proc]) return HttpResponse(t.render(c))
Отредактировано zlodiak (Май 3, 2014 16:43:18)
Офлайн
Офлайн
спасибо конечно. но нельзя ли встроенными средствами джанги обойтись?
Офлайн
zlodiak
что-то на меня нашло…
Попробуй так сделать
form = PersonalDataForm(request.POST, User.objects.get(username__exact=request.user.username))
Офлайн
пустые поля вижу…
Офлайн
Если PersonalDataForm наследуется от ModelForm, то для достижения вашей цели следует передать в нее аргумент instance при создании. Т.е. что-то в таком духе:
form = PersonalDataForm(request.POST or None, instance=entry_user_profile) if form.is_valid(): form.save()
Отредактировано pythonlove (Май 4, 2014 22:41:16)
Офлайн