列中的空值违反了Django

列中的空值违反了Django

本文介绍了Django-列中的空值违反了Django Admin中的非空约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试向数据库中添加数据时,我在Django管理员中遇到了完整性错误.

I'm facing an Integrity Error in Django admin while trying to add data to the database.

回溯如下:

  Environment:


  Request Method: POST
  Request URL: http://127.0.0.1:8000/site/admin/SilverInningsHelpline/classified/add/

  Django Version: 1.6.4
  Python Version: 2.7.3
  Installed Applications:
  ('django_admin_bootstrapped.bootstrap3',
   'django_admin_bootstrapped',
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'SilverInningsHelpline',
   'south')
  Installed Middleware:
  ('django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.common.CommonMiddleware',
   'django.middleware.csrf.CsrfViewMiddleware',
   'django.contrib.auth.middleware.AuthenticationMiddleware',
   'django.contrib.messages.middleware.MessageMiddleware',
   'django.middleware.clickjacking.XFrameOptionsMiddleware')


  Traceback:
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
    114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
    432.                 return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
    99.                     response = view_func(request, *args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
    52.         response = view_func(request, *args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
    198.             return view(request, *args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
    29.             return bound_func(*args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
    99.                     response = view_func(request, *args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
    25.                 return func(self, *args2, **kwargs2)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/transaction.py" in inner
    371.                 return func(*args, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
    1131.                 self.save_model(request, new_object, form, False)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in save_model
    860.         obj.save()
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/base.py" in save
    545.                        force_update=force_update, update_fields=update_fields)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/base.py" in save_base
    573.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/base.py" in _save_table
    654.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/base.py" in _do_insert
    687.                                using=using, raw=raw)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/manager.py" in _insert
    232.         return insert_query(self.model, objs, fields, **kwargs)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/query.py" in insert_query
    1511.     return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
    903.             cursor.execute(sql, params)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/backends/util.py" in execute
    69.             return super(CursorDebugWrapper, self).execute(sql, params)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/backends/util.py" in execute
    53.                 return self.cursor.execute(sql, params)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/utils.py" in __exit__
    99.                 six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/siddharth/SilverInnings/venv/local/lib/python2.7/site-packages/django/db/backends/util.py" in execute
    53.                 return self.cursor.execute(sql, params)

  Exception Type: IntegrityError at /site/admin/SilverInningsHelpline/classified/add/
  Exception Value: null value in column "category_id" violates not-null constraint

我的模型如下:

class Categories(models.Model):
    id = models.AutoField(primary_key=True)
    type = models.CharField(max_length=300)

    def __unicode__(self):
        return self.type


class Subcategory(models.Model):
    id = models.AutoField(primary_key=True)
    parent = models.ForeignKey(Categories)
    name = models.CharField(max_length=300)

    def __unicode__(self):
        return self.name



class Classified(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    contact_person = models.CharField(max_length=300)
    email = models.CharField(max_length=100)
    address = models.ForeignKey(Address)
    subcategory = models.ForeignKey(Subcategory)
    phone_number = models.BigIntegerField(max_length=20, default=0)
    image = models.ImageField(blank=True, upload_to='dynamic/img/')
    NO = 'NO'
    YES = 'YES'
    APPROVAL = ((NO, 'no'), (YES, 'yes'))
    active = models.CharField(choices=APPROVAL, default=NO, max_length=3)
    verified = models.CharField(choices=APPROVAL, default=NO, max_length=3)

    def __unicode__(self):
        return self.name

当我尝试从Admin进入分类表时,会出现问题.

The problems arise when I try to make an entry to the Classified table from Admin.

从这里尝试过的解决方案:

Tried solution from here:

IntegrityError:列"; city_id"违反非空约束,因为它与我的问题最接近.在该链接上尝试解决方案后,我的表如下所示:

IntegrityError: null value in column "city_id " violates not-null constraint as it was the closest to my problem. My tables looked like this after trying the solution on that link:

class Categories(models.Model):
    id = models.AutoField(primary_key=True)
    type = models.CharField(max_length=300, unique=True, default='All', null=True)

    def __unicode__(self):
        return self.type


class Subcategory(models.Model):
    id = models.AutoField(primary_key=True)
    parent = models.ForeignKey(Categories, null=True, blank=True, default='All')
    name = models.CharField(max_length=300)

    def __unicode__(self):
        return self.name



class Classified(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256)
    contact_person = models.CharField(max_length=300)
    email = models.CharField(max_length=100)
    address = models.ForeignKey(Address)
    subcategory = models.ForeignKey(Subcategory)
    phone_number = models.BigIntegerField(max_length=20, default=0)
    image = models.ImageField(blank=True, upload_to='dynamic/img/')
    NO = 'NO'
    YES = 'YES'
    APPROVAL = ((NO, 'no'), (YES, 'yes'))
    active = models.CharField(choices=APPROVAL, default=NO, max_length=3)
    verified = models.CharField(choices=APPROVAL, default=NO, max_length=3)

    def __unicode__(self):
        return self.name

但这并不能解决我的问题,现在我被困住了.

But this did not solve my problem and now I'm stuck.

推荐答案

查看模型,您的任何表中都不应包含字段 category_id .也许您更改了模型,但没有更改数据库中的表.现在,当您创建条目时,Django不会填充它不知道的字段,这会产生错误.您应该从表中删除不需要的字段.或者,如果可能的话,您可以删除整个数据库并从头开始运行 manage.py syncdb .

Looking at your models you shouldn't have field category_id in any of your tables. Perhaps you changed your models but did not alter tables in the database. Now when you create an entry, Django does not fill fields it doesn't know about of and this creates an error. You should remove unneeded fields from your tables. Or if it is possible you can drop the whole database and run manage.py syncdb from scratch.

这篇关于Django-列中的空值违反了Django Admin中的非空约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-03 17:04