2010-07-08 122 views
0

我有一个页面,显示登录用户可以用来编辑其配置文件的表单。Django:如何访问模板中的模型字段数据

用户第一次加载相应视图时,通过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"> 

回答

1

做你想做的事情的方法是编写自定义表单小部件,而不是在模板中做。

您可以完全创建一个自定义的widget,或者你可以添加/更改属性的表单中的水平,当你初始化的的ModelForm

+0

谢谢。我觉得编写自定义小部件是便于维护的最佳选择。我现在遇到的问题是了解如何从自定义小部件代码中访问字段的错误对象。 – bitbutter 2010-07-09 09:54:20

+0

错误将由表单字段的验证功能设置。小部件是标记和css,表单域是逻辑。你可以写两个。 – 2010-07-09 17:52:39