Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django : NOT NULL constraint failed

Tags:

sqlite

I am trying to run a app which has a basic template which accepts the fields and saves it. My Model looks like this:

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 %}

When I runs the server the Html page displayed, but when I click the Add Book button, it shows the following error:

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

I haven't define author_id any where, What caused it?

I am using Sqlite 3.

like image 978
Rizwan Shaikh Avatar asked Dec 10 '25 23:12

Rizwan Shaikh


1 Answers

id fields are automatically generated by Models, and they are predictably of type serial NOT NULL PRIMARY KEY,. While using the Book model, they are required but have not been set yet. Database didn't get any author_id, so it attempted to set null on this field, but id field has the not null constraint. You can fix by either setting null=True on field definition in the model, or you can have a default, or add an author field to your form.

like image 192
notrai Avatar answered Dec 14 '25 05:12

notrai



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!