Django ModelForm booleanfield 必填字段不起作用
Posted
技术标签:
【中文标题】Django ModelForm booleanfield 必填字段不起作用【英文标题】:Django ModelForm booleanfield Required field is not working 【发布时间】:2012-11-06 13:35:03 【问题描述】:我不知道为什么不起作用,但这是一个非常简单的例子
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
python 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
:(
【问题讨论】:
能否请您尝试澄清什么是无效的 最近的字段可以不庆祝,但是条件(空白=真)合作伙伴代码然后可以填写该字段应该是必填的,但是在admin部分不是粗体,是必填的.而在网站上,如果你点击“发送”字段不存在,那它一定 【参考方案1】:models.py
from django.core.exceptions import ValidationError
def clean(self):
if not self.personal:
raise ValidationError('blah')
或者您可以在表单中验证它...
【讨论】:
【参考方案2】:“必需”确实有效 - 它是一个 BooleanField,默认为 False
而不是 null。
未选中它是一个有效值 (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
【讨论】:
以使其成为填写所必需的要验证此表格,将其指向上面的框,还是只写一张额外的支票? 您应该通过覆盖clean
字段在模型中或在表单中添加对 personal==True
的检查。
FormWizard 对于这个显然是不够的,他已经成功转移到第二步:(
不确定你的意思。请查看我对答案的更新,也许会有所帮助。以上是关于Django ModelForm booleanfield 必填字段不起作用的主要内容,如果未能解决你的问题,请参考以下文章
django的modelform怎么设置required=False