2011-03-22 44 views
0

我目前正在探索Django表單,並有一個問題,我希望有人可以幫助我。NameError當試圖填充表單域從模型

我以下從Creating forms from models | Django documentation

採取我有形式的例子;

# forms.py 

from django import forms 
from my_project.my_app.models import Author 

class AuthorForm(forms.Form): 
    name = forms.CharField(max_length=100) 
    title = forms.CharField(max_length=3, 
      widget=forms.Select(choices=TITLE_CHOICES)) 
    birth_date = forms.DateField(required=False) 

and the model;

#models.py 

from django.db import models 

TITLE_CHOICES = (
    ('MR', 'Mr.'), 
    ('MRS', 'Mrs.'), 
    ('MS', 'Ms.'), 
) 
class Author(models.Model): 
    name = models.CharField(max_length=100) 
    title = models.CharField(max_length=3, choices=TITLE_CHOICES) 
    birth_date = models.DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

但是,當我嘗試訪問表單時收到以下錯誤;

NameError在/

名 'TITLE_CHOICES' 沒有定義

請求方法:GET請求URL: http://192.168.1.111:8000/ Django的 版本:1.2.4異常類型: NameError異常值:命名 'TITLE_CHOICES'未定義

有沒有我應該做的事情來允許forms.py t o在models.py中訪問TITLE_CHOICES?

在此先感謝。

+1

你似乎完全忽視或誤讀您鏈接到的文檔。這不是一個模型 - 它是一個標準形式。你根本不需要重新聲明這些字段。 – 2011-03-22 09:31:43

回答

3

TITLE_CHOICES應的類的內部定義:

from django.db import models 

class Author(models.Model): 
    TITLE_CHOICES = (
     ('MR', 'Mr.'), 
     ('MRS', 'Mrs.'), 
     ('MS', 'Ms.'), 
    ) 
    name = models.CharField(max_length=100) 
    title = models.CharField(max_length=3, choices=TITLE_CHOICES) 
    birth_date = models.DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.name 

而且形式:

from django import forms 
from my_project.my_app.models import Author 

class AuthorForm(forms.Form): 
    name = forms.CharField(max_length=100) 
    title = forms.CharField(max_length=3, 
      widget=forms.Select(choices=Author.TITLE_CHOICES)) 
    birth_date = forms.DateField(required=False) 
+0

謝謝dgel,你的回答已經解決了這個問題。非常感謝。 – Jamie 2011-03-22 09:43:47

+0

沒問題。您應該考慮Daniel的評論,並重新閱讀模型表單上的文檔 - 模型表單將自動從模型本身獲取所有正確的表單字段,您無需定義它們。 – dgel 2011-03-22 10:00:37