2009-09-13 103 views
0

遇到問題我正在嘗試編寫一個非常簡單的django應用程序。我不能讓它在我的模板中顯示我的表單。django新手。用ModelForm

<form ...> 
{{form.as_p}} 
</form> 

它顯示完全沒有。如果我添加一個提交按鈕,它只會顯示。

我是否必須聲明一個繼承自forms.Form的表單對象?不能用ModelForms來完成嗎?

[更新]解決!

在我的網址(爲浪費你的時間道歉)文件我有:

(r'login/$',direct_to_template, {'template':'register.html'} 

切換到:

(r'login/$','portal.views.register') 

是的,我覺得可怕。

背景:

我有一個學生模型,我有一個註冊頁面。當它被訪問時,它應該顯示一個要求學生姓名的文本框。如果學生完成了該領域,那麼它將保存它。

#models.py 

class Student(models.Model): 
    name = models.CharField(max_length =50) 

#forms.py 
class StudentForm (forms.ModelForm): 
    class Meta: 
     model = Student 

所以,這裏是我的觀點:

def register(request):                                 
      if request.method == 'POST': 
        form = StudentForm(request.POST) 
        if form.is_valid(): 
          form.save() 
          return render_to_response('/thanks/') 
      else: 

        student = Student() 
        form = StudentForm(instance =student) 

      return render_to_response('register.html',{'form':form}) 
+0

您不需要傳遞創建新學生的實例。我不確定這是否是使表單無法正常工作的原因,但這絕對沒有必要。 –

+0

我的不好:我在我的urls.py文件中使用了direct_to_template函數 謝謝大家! – Tom

回答

2

的問題是在你的看法。您將沒有現有的學生對象從數據庫中檢索。以下代碼示例將幫助您實現「創建」視圖。

作爲一個方面說明,你可能會喜歡使用direct_to_template通用視圖函數來讓你的生活更輕鬆一些。

def add_student(request): 
    if request.method == 'POST': 
     form = StudentForm(request.POST) 
     if form.is_valid(): 
     new_student = form.save() 

     return HttpResponseRedirect('/back/to/somewhere/on/success/') 
    else: 
     form = StudentForm() 

    return direct_to_template(request, 
           'register.html', 
           {'form':form}) 
+0

謝謝,但是表單在我第一次訪問URL時仍然不顯示。但看看你的提示。 – Tom

+0

對不起,你是對的。 – Tom