2011-03-22 46 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