如何创建一个人(models.Model):存储通过调查表提交的数据?
How to create a Person(models.Model): to store data submitted through a Survey Form?
我创建了一个小型 Django (1.6.2) 调查应用程序,它使用连接到 MySQL 数据库的 SessionWizardView 拆分为多个页面。 我没有创建必要的模型来将表单数据保存到数据库。
我想做的是在数据库中为每个完成表格的人创建一个单独的条目。为此,我尝试在 models.py
中创建一个 Person(models.Model):
,并在 forms.py
中创建相应的调查问题条目
当我 运行 python manage.py syncdb
我没有得到任何错误,我可以通过 phpMyAdmin 看到新创建的 survey_person
table。当我检查 table 结构时,我可以看到每个单独的 fields/rows 代表我刚刚创建的 Person(models.Model);
。
问题是,当我填写并提交调查申请时,none 数据似乎已保存到数据库中。
问题:如何使用我刚创建的 Person 模型将通过调查表提交的数据存储在数据库中?
如果有人能告诉我如何存储一个元素,例如email
我相信我能解决剩下的问题。
谢谢
models.py
from django.db import models
from django.forms import ModelForm
from survey.forms import SurveyFormA, SurveyFormB
class Person(models.Model):
sender = models.EmailField(max_length=200)
birthdate = models.DateField(blank=True, null=True)
sex = models.ForeignKey('Person', related_name='Person_sex')
smart_phone_ownership = models.ForeignKey('Person', related_name='Person_smart_phone_ownership')
def __unicode__(self):
return self
forms.py
from django import forms
from django.core import validators
from django.forms import extras
import random
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):
YES_SMARTPHONE = 'Yes'
NO_SMARTPHONE = 'No'
SMART_PHONE_OWNERSHIP = (
(YES_SMARTPHONE, 'Yes'),
(NO_SMARTPHONE, 'No'),
)
smart_phone_ownership = forms.ChoiceField(widget=forms.RadioSelect(), choices=SMART_PHONE_OWNERSHIP, initial= "", label='Do you own a Smartphone?', required = False)
....
....
任何帮助一如既往,非常感谢。
如果您使用 ModelForm
而不是 Form
,您的模型应该会自动保存。
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/
forms.py
from django import forms
from .models import Person
class SurveyFormA(forms.ModelForm):
class Meta:
model = Person
fields = ['sender', 'birthdate']
class SurveyFormB(forms.ModelForm):
class Meta:
model = Person
fields = ['smart_phone_ownership']
您的选择,help_text等可以直接在模型中设置:
models.py
from django.db import models
class Person(models.Model):
sender = models.EmailField(null=True)
birthdate = models.DateField(null=True)
MALE = 'M'
FEMALE = 'F'
SEX = (
(MALE, "Male"),
(FEMALE, "Female"))
sex = models.ChoiceField(choices=SEX, ...)
...
我创建了一个小型 Django (1.6.2) 调查应用程序,它使用连接到 MySQL 数据库的 SessionWizardView 拆分为多个页面。
我想做的是在数据库中为每个完成表格的人创建一个单独的条目。为此,我尝试在 models.py
中创建一个 Person(models.Model):
,并在 forms.py
当我 运行 python manage.py syncdb
我没有得到任何错误,我可以通过 phpMyAdmin 看到新创建的 survey_person
table。当我检查 table 结构时,我可以看到每个单独的 fields/rows 代表我刚刚创建的 Person(models.Model);
。
问题是,当我填写并提交调查申请时,none 数据似乎已保存到数据库中。
问题:如何使用我刚创建的 Person 模型将通过调查表提交的数据存储在数据库中?
如果有人能告诉我如何存储一个元素,例如email
我相信我能解决剩下的问题。
谢谢
models.py
from django.db import models
from django.forms import ModelForm
from survey.forms import SurveyFormA, SurveyFormB
class Person(models.Model):
sender = models.EmailField(max_length=200)
birthdate = models.DateField(blank=True, null=True)
sex = models.ForeignKey('Person', related_name='Person_sex')
smart_phone_ownership = models.ForeignKey('Person', related_name='Person_smart_phone_ownership')
def __unicode__(self):
return self
forms.py
from django import forms
from django.core import validators
from django.forms import extras
import random
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):
YES_SMARTPHONE = 'Yes'
NO_SMARTPHONE = 'No'
SMART_PHONE_OWNERSHIP = (
(YES_SMARTPHONE, 'Yes'),
(NO_SMARTPHONE, 'No'),
)
smart_phone_ownership = forms.ChoiceField(widget=forms.RadioSelect(), choices=SMART_PHONE_OWNERSHIP, initial= "", label='Do you own a Smartphone?', required = False)
....
....
任何帮助一如既往,非常感谢。
如果您使用 ModelForm
而不是 Form
,您的模型应该会自动保存。
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/
forms.py
from django import forms
from .models import Person
class SurveyFormA(forms.ModelForm):
class Meta:
model = Person
fields = ['sender', 'birthdate']
class SurveyFormB(forms.ModelForm):
class Meta:
model = Person
fields = ['smart_phone_ownership']
您的选择,help_text等可以直接在模型中设置:
models.py
from django.db import models
class Person(models.Model):
sender = models.EmailField(null=True)
birthdate = models.DateField(null=True)
MALE = 'M'
FEMALE = 'F'
SEX = (
(MALE, "Male"),
(FEMALE, "Female"))
sex = models.ChoiceField(choices=SEX, ...)
...