Django:如何访问模板中的modelform字段数据

时间:2010-07-08 13:39:54

标签: django forms django-forms

我有一个页面,显示登录用户可用于编辑其个人资料的表单。

用户首次使用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">

2 个答案:

答案 0 :(得分:1)

执行您想要做的事情的方法是编写自定义表单小部件,而不是在模板中执行此操作。

您可以创建完全自定义的窗口小部件,也可以在初始化模型窗口

时在窗体级别添加/更改属性

答案 1 :(得分:0)

我猜你可以使用小部件attrs参数http://docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs来解决你的一些问题,而不是使用输入的id来设置一些样式选项!