2015-11-04 125 views
0

我試圖運行一個應用程序,該應用程序具有接受字段並保存它的基本模板。我的模型是這樣的:Django:NOT NULL約束失敗

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頁面的服務器,但當我點擊Add Book按鈕時,它顯示以下錯誤:

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.

回答

0

id字段由模型自動生成的,並且它們是可預測serial NOT NULL PRIMARY KEY,類型。使用Book模型時,它們是必需的,但尚未設置。數據庫沒有得到任何author_id,所以它試圖在這個字段上設置null,但是id字段有非空約束。您可以通過在模型中爲字段定義設置null = True來解決問題,也可以使用缺省值或將作者字段添加到表單中。

相關問題