У меня есть страница, на которой отображается форма, которую зарегистрированный пользователь может использовать для редактирования своего профиля.
При первой загрузке пользователем соответствующего представления с помощью запроса GET в форме должны отображаться значения существующей записи профиля пользователя.
Поскольку я хотел бы иметь детальный контроль над разметкой, используемой для полей формы, я хотел бы получить только значения полей и вручную написать необходимую разметку входного элемента, вставляя полученные значения полей в качестве входных элементов ' Атрибут 'value' (вместо того, чтобы django отображал все входные элементы).
До сих пор я пытался использовать директивы типа {{form.myfield.data}} в моем шаблоне для доступа к данным поля, но это возвращает «Нет», а не данные профиля, как я ожидал.
Если пользователь только что опубликовал действительную форму, поля формы содержат ожидаемые данные профиля.
Я надеюсь, что кто-то может помочь мне понять, что я делаю здесь неправильно:
Вот мой взгляд:
@login_required
def edit(request):
# get logged-in user's profile
obj=Profile.objects.get(user=request.user)
if request.method == 'POST': # If the form has been submitted...
form = ProfileForm(request.POST, request.FILES, instance=obj)
if form.is_valid(): # All validation rules pass
form.save()
request.flash['success'] = "Your profile has been updated." # Puts a string to the flash scope
else:
request.flash['error'] = 'Please correct the problems below and try again' # Puts a string to the flash scope
else:
# if no form was submitted
# derive the form data from the logged-in users existing profile
form = ProfileForm(instance=obj)
return render_to_response('app_profile/edit.html',
{
'form': form,
'user': request.user,
'ancestor_urls': ['app_profile.views.edit',],
},context_instance=RequestContext(request)
)
А вот выдержка из соответствующего шаблона. Этот элемент ввода имеет дело с полем с именем 'display_name'.
<input type="text"
class="textInput large {% if form.display_name.errors %}error{% endif %}"
maxlength="50"
size="35"
value="{{ form.display_name.data }}"
id="id_display_name"
name="display_name">