Django:NOT NULL约束失败

时间:2015-11-04 11:17:58

标签: sqlite

我正在尝试运行一个具有基本模板的应用程序,该模板接受字段并保存。我的模型看起来像这样:

from django.db import models

# Create your models here.

class Book(models.Model):
    """docstring for MyApp"""
    title = models.CharField(max_length=200)
    abstract =  models.TextField()
    pub_date = models.DateTimeField('date published')
    publisher = models.CharField(max_length=200)
    def __unicode__(self):
        return self.title

class Author(models.Model):
    name = models.CharField(max_length=200)
    sci='Sci'
    arts= 'Arts'
    engg= 'Engg'
    mgmt='mgmt'
    none=' '
    Choice_In_Intrest = (
        (sci,'Science'),
        (arts,'Arts'),
        (engg,'Engineering'),
        (mgmt,'Mangaement'),
        )
    intrest = models.CharField(max_length=4 ,choices=    Choice_In_Intrest , default=none)
    book = models.ForeignKey(Book, null=True)

urls.py:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    #url(r'^admin/', include(admin.site.urls)),
    url(r'^create/$', 'myBook.views.insertBook'),
    url(r'^all/$', 'myBook.views.books'),
    url(r'^get/(?P<book_id>\d+)/$', 'myBook.views.book'),
    url(r'^addAuthor/(?P<book_id>\d+)/$', 'myBook.views.addAuthor'),
]

forms.py:

    from django import forms
    from models import Book, Author

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

    class AuthorForm(forms.ModelForm):
        class Meta:
            model = Author
            fields = '__all__'



**insert_book.html:**

{% block content%}
<h2>Add Book</h2>
<form action='/create/' method="POST">{%csrf_token%}
<ul>
    {{form.as_ul}}
</ul>

<input type="submit" name="submit" value="Add Book">
</form>
{% endblock %}

当我运行服务器显示Html页面时,但当我点击添加书籍按钮时,它会显示以下错误:

IntegrityError at /create/
NOT NULL constraint failed: myBook_book.author_id
Request Method: POST
Request URL:    http://127.0.0.1:8080/create/
Django Version: 1.8.5
Exception Type: IntegrityError
Exception Value:    
NOT NULL constraint failed: myBook_book.author_id
Exception Location: /home/rizwan/django-rizwan/local/lib/python2.7/site-packages/Django-1.8.5-py2.7.egg/django/db/backends/sqlite3/base.py in execute, line 318
Python Executable:  /home/rizwan/django-rizwan/bin/python
Python Version: 2.7.6
Python Path:    
['/home/rizwan/projects/bookInfo',
 '/home/rizwan/django-rizwan/local/lib/python2.7/site-packages/Django-1.8.5-py2.7.egg',
 '/home/rizwan/django-rizwan/lib/python2.7/site-packages/Django-1.8.5-py2.7.egg',
 '/home/rizwan/django-rizwan/lib/python2.7',
 '/home/rizwan/django-rizwan/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/rizwan/django-rizwan/lib/python2.7/lib-tk',
 '/home/rizwan/django-rizwan/lib/python2.7/lib-old',
 '/home/rizwan/django-rizwan/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/rizwan/django-rizwan/local/lib/python2.7/site-packages',
 '/home/rizwan/django-rizwan/lib/python2.7/site-packages']
Server time:    Wed, 4 Nov 2015 11:12:00 +0000

我还没有定义author_id在哪里,是什么造成的?

我正在使用Sqlite 3。

1 个答案:

答案 0 :(得分:1)

模型自动生成

id个字段,它们可以预测为serial NOT NULL PRIMARY KEY,类型。使用Book模型时,它们是必需的,但尚未设置。数据库没有获得任何author_id,因此它尝试在此字段上设置null,但id字段具有非null约束。您可以通过在模型中的字段定义上设置null = True来修复,也可以使用默认值,或者在表单中添加作者字段。

相关问题