【问题标题】:Creating a Person model from forms.py data从 forms.py 数据创建 Person 模型
【发布时间】: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


【解决方案1】:

在这一行:

email = forms.SurveyFormA.sender(max_length=200)

forms 代表 Django 模块。试试这个:

email = SurveyFormA.sender(max_length=200)

【讨论】:

  • 试过你的解决方案,但它给了我一个错误AttributeError: type object 'SurveyFormA' has no attribute 'sender'
  • 'sender' 是一个类变量,但您试图将其称为函数。在没有看到其余代码的情况下,我不确定您的意图是什么,但是您需要采取一种或另一种方式。
  • 这是有道理的。我添加了更多代码来尝试更好地描述我想要实现的目标。我的 forms.py 中的类变量 email 保存用户电子邮件地址的值,我想将它放入我的 models.py Person 模型中,以便我可以将其存储在我的 MySQL 数据库中。我希望这是有道理的
  • 抱歉,现在在家,我正在仔细查看您的代码,我认为 Ben 是对的 - 您需要再看一下 Django 的文档。具体来说,如何定义模型子类。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多