【发布时间】:2015-05-08 20:35:57
【问题描述】:
我试图弄清楚如何从我创建的名为“调查”的小型应用程序中获得的数据创建人模型。调查应用程序使用 SessionWizardView 将调查拆分为多个页面。
我一直收到这个错误
文件 “/Users/brendan/Dropbox/workspace/bias_experiment/src/survey/models.py”, 第 38 行,亲自 email = forms.SurveyFormA.sender(max_length=200) AttributeError: 'module' object has no attribute 'SurveyFormA' localhost:src brendan$
models.py
from django import forms
from django.db import models
from survey.forms import SurveyFormA, SurveyFormB
class Person(models.Model):
email = forms.SurveyFormA.sender(max_length=200)
def __unicode__(self):
return self.email
forms.py
这是我在 forms.py 中遇到的一些问题的示例
class SurveyFormA(forms.Form):
sender = forms.EmailField(label='What is your email address?', required = False)
birthdate = forms.DateField(widget=extras.SelectDateWidget(years = range(1995, 1900, -1)), label='What is your Date of Birth?', required = False)
MALE = 'M'
FEMALE = 'FM'
SEX = (
("", "----------"),
(MALE, "Male"),
(FEMALE, "Female"),
)
sex = forms.ChoiceField(widget=forms.Select(), choices=SEX, initial= "", label='What sex are you?', required = False)
class SurveyFormB(forms.Form):
....
more questions here
....
我正在使用 Python 2.7.3 和 Django 1.6.2(我会尽快更新)
我在这里错过了什么?
谢谢
【问题讨论】:
-
表单字段和模型字段不一样——您不能在模型中使用表单字段。看来您需要多阅读Django docs。
-
嗨 Ben,我使用 forms.py 和 form 的唯一原因是因为我认为我的意思是“创建表单向导的第一步是创建 Form 类。这些应该是标准的django.forms.Form 类,包含在表单文档中。这些类可以存在于代码库中的任何位置,但惯例是将它们放在应用程序中名为 forms.py 的文件中。 docs.djangoproject.com/en/1.6/ref/contrib/formtools/form-wizard/… 或者我错过了什么?
-
是的,这对于制作表单向导是正确的。但这与模型无关。如果您想使用表单中的数据来保存模型实例,则需要使用 ModelForm 或手动保存。但无论哪种方式,您的模型都需要使用 django.db.models.EmailField 等而不是 django.forms.EmailField 正确定义。表单字段知道如何呈现为 HTML 表单,模型字段知道如何从数据库中保存和检索数据。
-
@Ben 我最终按照您的指示使用了 ModelForm。如果您写下您的评论作为答案,我很乐意接受
标签: python django python-2.7 django-models django-forms