1

假设我在 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')

当我尝试在 shell 中创建对象时,我收到此错误:

>>> form = QuestionForm()
>>> from django.utils import timezone
>>> form.publish_date = timezone.now().year
>>> form.save()
IntegrityError: (1048, "Column 'publish_date' cannot be null")

我在这里错过了什么吗?

4

2 回答 2

2

嗯,是的:你已经错过了表单的全部目的。

只是手动分配一个与模型属性同名的属性根本不会做任何事情。这不是表单的工作方式。表单通过接受一个data参数来工作,该参数是将字段名映射到值的字典。然后你打电话form.is_valid()来验证它。只有这样你才能打电话form.save()

于 2013-02-16T03:05:41.083 回答
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)

在上面的代码片段中,您可以确保published_date使用blank=False. 正如丹尼尔所指出的,您还需要form.is_valid()在保存数据之前调用。

于 2013-02-16T03:27:49.773 回答