如何创建一个人(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, ...) 
    ...