2012-05-31 36 views
4

Django的新功能和我已經用盡每個論壇和教程我可以和我仍然有問題獲取我的表單數據到數據庫。我有一個簡單的模型,它包含一個名稱和一個電子郵件字段,我最終將在程序中引用它。點擊提交後,我可以加載不同的頁面,但我的數據不會發布到數據庫。我已經試過所有我能想到的,所以我的代碼是在這一點上可能擡高,但在當前迭代這是我有:在Django中使用ModelForm添加到數據庫

#models.py 
    from django.db import models 
from django.forms import ModelForm 

class Patron(models.Model): 
    name = models.CharField(max_length=200) 
    email = models.EmailField(max_length=75) 


    def _unicode_(self): 
     return self.name 

class PatronForm(ModelForm): 
    class Meta: 
     model = Patron 

#view.py 

from django.shortcuts import render_to_response, get_object_or_404 
from patrons.models import Patron 
from django.template import RequestContext 
from django.core.context_processors import csrf 
from django.core.urlresolvers import reverse 
from django.forms import ModelForm 


def index(request): 
    if request.method == 'POST': 
     post = request.POST 
     name = post['name'] 
     email = post['email'] 
     f = PatronForm(request.Post) 
     new_patron = f.save() 
    return render_to_response('patrons/index.html', 
           context_instance=RequestContext(request)) 

#html 
<body> 
    <h1>/Picture Taker/</h1> 



    <form aciton="." name="patron" method="post" > 
    {% csrf_token %} 

     <label> 
      <div>name</div> <input type="text" name="name" id="name" value="{{name}}"> 
     </label> 
     <label> 
      <div>email</div> <input type="text" name="email" id="email" value="{{email}}"> 
     </label> 

     <div class="error">{{error}}</div> 
     <input type="submit" value="Submit"> 
    </form> 

</body> 

任何幫助,將不勝感激

回答

4

所有

post = request.POST 
name = post['name'] 
email = post['email'] 
f = PatronForm(request.Post) 
new_patron = f.save() 

可被重新寫爲(注意的request.POST的情況下):

f = PatronForm(request.POST) 
new_patron = f.save() 

但你應該保存,所以前檢查形式的錯誤:

f = PatronForm(request.POST) 
if f.is_valid(): 
    new_patron = f.save() 

你也有一個錯字在你的表單標籤,它應該是「行動」,而不是「aciton」。您在模板中的{{error}}不會引用您視圖中的任何內容。在調試時,讓表單呈現自身可能會有所幫助,例如:

{{ form.as_p }} 

因此您可以在表單提交中看到任何錯誤。

+0

感謝@湯姆現在我得到這個錯誤,當我試圖提交全球名稱'PatronForm'未定義 \t f = PatronForm(request.POST)... ▶Local vars – user808996

+0

在views.py中,您需要導入表單。它應該在一個名爲「forms.py」的單獨文件中保持一致性,但在你的情況下,它看起來像「從patron.models導入PatronForm」 – Tom

0

你不需要「每個論壇和教程」,你只需要官方文檔,其中this is explained clearly。您在該鏈接中看到的代碼唯一的變化是您需要在「處理數據」位中添加form.save()(並且,您應該在render_to_response調用中使用RequestContext,就像您已經這樣做了)。

另外要改變的是你要依靠Django的呈現在模板的整個領域,而不僅僅是值:

<p> 
{{ form.name }} 
{{ form.name.errors }} 
</p> 

<p> 
{{ form.email }} 
{{ form.email.errors }} 
</p> 
+0

謝謝,我在更改我的代碼後得到以下內容:全局名稱'PatronForm'沒有被定義爲以下錯誤跟蹤: get_response中的文件「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py」 111.響應=回調(請求,* callback_args,** callback_kwargs) 文件 「/Users/curtis/picturetaketest3/mysite/patrons/views.py」 在索引 11. \t \t F = PatronForm(request.POST) – user808996

+0

那麼,你沒有將它導入你的視圖。 –

相關問題