Найти - Пользователи
Полная версия: вывод данных в форме при первой загрузке
Начало » Django » вывод данных в форме при первой загрузке
1
zlodiak
люди добрые, помогите пожалуйста разобраться с типовой задачей для формы

есть форма, связанная с БД. необходимо чтобы при первой загрузке поля были заполнены соответствующими значениями из БД(каждому поле соответствует определённая ячейка таблицы). после того как пользователь изменит значение полей в форме и отошлёт её, обновляются данные в БД

эту задачу я решил так:
фрагмент из 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))

здесь UserProfile это модель, унаследованная от User. таким образом в User содержатся пароль и логин, а в UserProfile - остальные данные(family, name1 и т.д.)

проблема в том, что запись слишком громоздкая. уверен, что существует способ записать приведённый код более компактно и лаконично

помогите пожалуйста исправить
Singularity
http://flask.pocoo.org/snippets/60/
zlodiak
спасибо конечно. но нельзя ли встроенными средствами джанги обойтись?
Singularity
zlodiak
что-то на меня нашло…
Попробуй так сделать
form = PersonalDataForm(request.POST,  User.objects.get(username__exact=request.user.username))
zlodiak
пустые поля вижу…
pythonlove
Если PersonalDataForm наследуется от ModelForm, то для достижения вашей цели следует передать в нее аргумент instance при создании. Т.е. что-то в таком духе:

form = PersonalDataForm(request.POST or None, instance=entry_user_profile)
if form.is_valid():
    form.save()

Подробности, конечно же, в этом разделе документации. А вот здесь есть презентация, хорошо показывающая, как можно писать меньше кода в обычных вьюхах с формами.
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