mysql Django -列中的null值违反Django管理中的not-null约束

lxkprmvk  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(154)

我在Django admin中遇到了一个完整性错误,同时试图将数据添加到数据库。
回溯如下:

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向Classified表创建条目时,出现了问题。
从这里尝试解决方案:
IntegrityError: null value in column "city_id " violates not-null constraint因为它是最接近我的问题。在尝试了该链接上的解决方案后,我的表看起来像这样:

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

但这并没有解决我的问题,现在我被卡住了。

l7mqbcuq

l7mqbcuq1#

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

wr98u20j

wr98u20j2#

只需在您的所有字段中添加null=True检查https://docs.djangoproject.com/en/3.1/topics/migrations/#postgresql

y1aodyip

y1aodyip3#

我在models.ForeignKey()中遇到了同样的错误:
django.db.utils.IntegrityError:关系“my_app_product”的列“categories_id”中的空值违反了非空约束
因为我在设置blank=True为models.ForeignKey()的时候没有设置null=True,然后在Django Admin的添加页面尝试添加空白数据---------,如下图所示。* 对于models.ForeignKey()和模型,Django中的OneToOneField(),我们在设置blank=True时需要设置null=True

# "my_app/models.py"

class Category(models.Model):
    name = models.CharField(max_length=20)

class Product(models.Model):
    categories = models.ForeignKey(
        Category, 
        blank=True, # Here 
        on_delete=models.CASCADE
    )
    name = models.CharField(max_length=20)

因此,我将null=Trueblank=True设置为models.ForeignKey(),如下图所示,然后解决了错误:

# "my_app/models.py"

class Category(models.Model):
    name = models.CharField(max_length=20)

class Product(models.Model):
    categories = models.ForeignKey(
        Category, 
        blank=True,
        null=True, # Here
        on_delete=models.CASCADE
    )
    name = models.CharField(max_length=20)

相关问题