2010-07-08 161 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