无法使用Django ModelForm进行模型绑定
假设我在Python中有一个模型类:
class Question(models.Model):
title = models.CharField('Title', max_length=300)
description = models.CharField('Description', max_length=800)
publish_date = models.DateTimeField('Pulished Date')
question_type = models.CharField(max_length=10)
我想把它和一个模型表单(ModelForm)绑定在一起:
class QuestionForm(ModelForm):
class Meta:
model = Question
fields = ('title',
'description',
'publish_date',
'question_type')
当我在命令行中尝试创建一个对象时,出现了这个错误:
>>> form = QuestionForm()
>>> from django.utils import timezone
>>> form.publish_date = timezone.now().year
>>> form.save()
IntegrityError: (1048, "Column 'publish_date' cannot be null")
我是不是漏掉了什么?
2 个回答
0
你需要为你的表单或者字段添加验证。
class Question(models.Model):
title = models.CharField('Title', max_length=300)
description = models.CharField('Description', max_length=800)
publish_date = models.DateTimeField('Pulished Date', blank=False)
question_type = models.CharField(max_length=10)
在上面的代码片段中,你可以通过使用 blank=False
来确保用户填写了 published_date
。正如Daniel所提到的,在保存数据之前,你还需要调用 form.is_valid()
来检查数据是否有效。
2
嗯,是的:你完全没理解表单的目的。
仅仅手动给一个和模型属性同名的属性赋值是没有任何用的。这不是表单的工作方式。表单的工作原理是通过一个叫 data
的参数,这个参数是一个字典,用来把字段名和对应的值联系起来。然后你需要调用 form.is_valid()
来验证这些数据。只有在验证通过后,你才能调用 form.save()
来保存数据。