django NOT NULL 约束失败:app_subject.created

django NOT NULL constraint failed: app_subject.created

我在尝试保存表单时得到空约束

我的模型

class Subject(models.Model):
    name=models.CharField(max_length=128,  blank=True)
    created=models.DateTimeField('Created Date',blank=True)


    def __str__(self):
        return self.name

class Book(models.Model):
    book_subject=models.ForeignKey(Subject,on_delete=models.CASCADE)
    book_name=models.CharField(max_length=128)
    url=models.URLField()
    votes=models.IntegerField(default=0)
    created_time=models.DateTimeField('Created Date',blank=True)
    comments=models.CharField(max_length=400)

    def __str__(self):
        return self.book_name

我的表格

class SubjectForm(forms.ModelForm):
    class Meta:
        model = Subject
        fields=('name', )

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields=('book_title',)

views.py

def add_subject(request):
    if request.method == 'POST':
        form = SubjectForm(request.POST)
        if form.is_valid():
            form.save(commit=True)
            return index(request)
        else:
            print form.errors
    else:
        form = SubjectForm()
    return render(request,'add_subj.html', {'form': form})

保存表单时出现空约束错误。 views.py at form.save(commit=True) 导致错误...一切都很简单..但令人困惑.....可能是什么问题...

当我打印表格时,我得到以下答案

<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" maxlength="128" name="name" type="text" value="civil" /></td></tr>

非常感谢任何帮助...提前致谢

看起来您实际上并没有设置 "created" 字段,而且虽然您设置了 blank=True,但您还没有设置 null=Trueblank只是表示该字段不需要填写表格,而null实际上允许字段在数据库中None。这就是为什么您的表单正在验证,但实际上并未保存。

因此,您可以将 null=True 添加到 createdcreated_time 字段。但是,如果您的目的只是让它们存储创建日期,那么将字段设置为类似以下内容会更容易:

created = models.DateTimeField(auto_now_add=True)

auto_now_add 将在创建对象时自动为您设置字段。这应该几乎可以满足您的需求。