我有一个页面,显示登录用户可用于编辑其个人资料的表单。
用户首次使用GET请求加载相应的视图时,表单应显示用户现有配置文件记录的值。
因为我想对用于表单字段的标记进行精细控制,所以我只想检索字段值,并手动编写必要的输入元素标记,将检索到的字段值作为输入元素插入'value'属性(而不是让django呈现整个输入元素)。
到目前为止,我一直在尝试在我的模板中使用{{form.myfield.data}}之类的指令来访问字段数据,但这会返回“无”,而不是像我预期的那样返回配置文件详细信息。 / p>
如果用户刚刚发布了有效表单,则表单字段确实包含预期的个人资料详细信息。
我希望有人可以帮助我理解我在这里做错了什么:
以下是我的观点:
@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)
)
以下是相应模板的摘录。此input元素处理名为“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">
答案 0 :(得分:1)
执行您想要做的事情的方法是编写自定义表单小部件,而不是在模板中执行此操作。
您可以创建完全自定义的窗口小部件,也可以在初始化模型窗口
时在窗体级别添加/更改属性答案 1 :(得分:0)
我猜你可以使用小部件attrs
参数http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs来解决你的一些问题,而不是使用输入的id来设置一些样式选项!