2014-05-22 2 views
2

데이터를 데이터베이스에 추가하는 동안 장고 관리자의 무결성 오류가 발생했습니다. 다음과 같이Django의 Django - null 값이 장고 관리에서 not-null 제약을 위반합니다.

역 추적입니다 : 내가 관리자에서 분류 된 테이블에 항목을 만들려고 할 때

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 

문제점이 발생 다음과 같이

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 

내 모델이다.

여기에서 솔루션을 시도 :

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 

그러나이 문제로 내 문제가 해결되지 않았지만 지금은 문제가 있습니다.

답변

6

모델을 보면 어떤 테이블에도 category_id 필드가 없어야합니다. 아마도 모델을 변경했지만 데이터베이스의 테이블을 변경하지 않았을 것입니다. 이제 엔트리를 만들 때 장고는 알지 못하는 필드를 채우지 않으며 이로 인해 오류가 발생합니다. 테이블에서 불필요한 필드를 제거해야합니다. 또는 가능한 경우 장난감은 전체 데이터베이스를 삭제하고 manage.py syncdb을 처음부터 실행할 수 있습니다.

+0

카테고리 기본 키 필드 'id'를 제거하면 좋을까요? 또는 'category_id'라는 필드를 구체적으로 찾고 있습니까? 또한이 데이터베이스를 삭제하면 현재 배포중인 Heroku에 반영해야하며 라이브 데이터를 잃지 않으려 고합니다. – Newtt

+0

나는 이해한다. 장에'category_id' 필드가있는 것 같지만 장고는 그것에 대해 알지 못합니다. 따라서 INSERT 문은이 필드를 비워 두지 만 NULL 제약 조건은 없습니다. 데이터베이스에 직접 액세스 할 수있는 경우이 열이있는 테이블을 확인하고 필요할 경우이를 결정해야합니다. 장고에 지정되어 있지 않으면 아마도 사용하지 않을 것입니다. –

+0

흠, 나는 데이터베이스를 삭제하고 새로운 것을 만들었습니다. 'manage.py syncdb'는 잘 작동하고 schemamigration도 잘 작동합니다. 다행스럽게도 데이터를 잃어 버리지는 않을 것입니다. – Newtt

관련 문제