2012-11-18 99 views
3

我不知道为什么不工作,但它是非常简单的例子的Django的ModelForm booleanfield必填字段不工作

models.py

class Reg(models.Model): 
    event = models.ForeignKey(Event, verbose_name=u'Мероприятие') 
    #первый автор 
    fam_author = models.CharField(max_length=200, verbose_name=u'Фамилия автора') 
    name_author = models.CharField(max_length=100, verbose_name=u'Имя автора') 
    ot_author = models.CharField(max_length=200,blank=True, null=True, verbose_name=u'Отчество автора') 
    no_ot = models.BooleanField(blank=True,verbose_name=u'Для граждан, не имеющих отчество по паспорту, отметить галочкой следующее поле') 
    ................... 
    personal = models.BooleanField(verbose_name=u'Согласие на обработку и использование персональных данных') 

    class Meta: 
     verbose_name = 'Автор' 
     verbose_name_plural = 'Автор' 

    class Admin: 
     pass 

    def __unicode__(self): 
     return u'%s (%s)' % (self.fam_author, self.name_author) 

forms.py

class GenForm11(ModelForm): 
    class Meta: 
     model = Reg 
     exclude = ('event') 

urls.py

(r'^kras/', ContactWizard.as_view([GenForm11, GenForm31, GenForms4, GenForms5, GenForms6, GenForms7])), 

pytnon manage.py执行syncdb

在管理撷取画面

在网站

为什么会这样?从基本模型几经辗转,再次创造了

UPD1

蟒蛇manage.py sqlall

CREATE TABLE `reg_reg` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `event_id` integer NOT NULL, 
    `fam_author` varchar(200) NOT NULL, 
    `name_author` varchar(100) NOT NULL, 
    `ot_author` varchar(200), 
    `no_ot` bool NOT NULL, 
    `birth_author` date NOT NULL, 
    `tel_m_author` varchar(15) NOT NULL, 
    `tel_r_author` varchar(15), 
    `tel_d_author` varchar(15), 
    `email_author` varchar(75) NOT NULL, 
    `email_d_author` varchar(75), 
    `text_author` longtext, 
    `facultet_diplom` varchar(50), 
    `napravl_diplom` varchar(50), 
    `kurs_diplom` varchar(50), 
    `group_diplom` varchar(50), 
    `text_diplom` longtext, 
    `post_diplom` varchar(200), 
    `sec` varchar(200) NOT NULL, 
    `personal` bool NOT NULL 
) 
; 

personal BOOL NOT NULL

:(

+0

能不能请你澄清什么是不工作 – second

+0

最近字段不能庆祝,但条件(空白=真)合作伙伴代码 然后你可以填写该字段应该是强制性的,但它是在管理部分不是粗体,根据需要。 并在网站上,如果单击“发送”领域是不存在的,它必然 –

回答

1

“需要”做的工作 - 这是一个BooleanField默认为False,而不是空。
让它取消选中是一个有效值(False)。

您可以重写clean()方法以确保它被设置为true。例如:

class Reg(models.Model): 
    # ... 

    def clean(self): 
     from django.core.exceptions import ValidationError 
     if not self.personal: 
      raise ValidationError('CUSTOM ERROR HERE') 

或者形式验证它:

class GenForm11(ModelForm): 
    class Meta: 
     model = Reg 
     exclude = ('event') 

    def clean_personal(self): 
     personal = self.cleaned_data['personal'] 

     if not personal: 
      raise ValidationError('CUSTOM ERROR HERE') 

     return personal 
+0

从而使其需要填充 为了验证这种形式指着它作为框上方 或只写一个额外的检查? –

+0

您应该在模型中通过覆盖'clean'字段或在表单中添加一个'personal == True'的检查。 – yprez

+0

FormWizard对于这显然是不够的,他已经成功转移到第二步:( –

2

models.py

from django.core.exceptions import ValidationError 

    def clean(self): 
     if not self.personal: 
      raise ValidationError('blah') 

,或者你可以在表单验证它...