简体   繁体   中英

Django models.DateTimeField django.db.utils.IntegrityError: NOT NULL constraint failed

What is the problem? I have googled and have not found any thing that gets close to what I have. Saving the profile to then continue to the next page produces the error.

I am working on the development server using sqlite.

Thank you.

models.py

class SchoolProfile(models.Model):
    create_date = models.DateTimeField(
        null=False, blank=False, **auto_now_add=True,**
        verbose_name=u'Fecha de creación')
    modification_date = models.DateTimeField(
        null=False, blank=False, **auto_now=True,**
        verbose_name=u'Fecha de última modificación')
    cycle = models.CharField(
        null=False, blank=False, max_length=9,
        verbose_name='Ciclo escolar')
    name = models.CharField(
        null=False, blank=False, max_length=100,
        verbose_name='Nombre de la escuela')

    def __unicode__(self):
        return '{} {}'.format(self.cycle, self.name)

    class Meta:
        db_table = 'Perfil Escolar'
        ordering = ['id', 'name']
        verbose_name = 'Perfil Escolar'
        verbose_name_plural = 'Perfiles Escolares'

    class Admin:
        pass


class SchoolServices(models.Model):

    school_profile = models.ForeignKey(
        SchoolProfile,
        on_delete=models.CASCADE)
    tipo = models.IntegerField(
        choices=SCHOOL_TYPE_CHOICES, default=SCHOOL_TYPE_KINDER,
        verbose_name='Tipo de Escuela')
    folio = models.CharField(
        null=True, blank=True, max_length=40,
        verbose_name='Folio')

    def __unicode__(self):
        return '{} [{}]'.format(self.tipo, self.folio)

    class Meta:
        db_table = 'Servicio Escolar'
        ordering = ['tipo', 'folio']
        verbose_name = 'Servicio Escolar'
        verbose_name_plural = 'Servicios Escolares'

    class Admin:
        pass

forms.py

class SchoolProfileForm(ModelForm):
    class Meta:
        model = SchoolProfile
        readonly_fields = (
            'create_date',
            'modification_date',)
        fields = (
            'cycle',
            'name',)


class SchoolServicesForm(ModelForm):
    class Meta:
        model = SchoolServices
        fields = (
            'tipo',
            'folio',)

views.py

class SchoolProfileView(LoginRequiredMixin, CreateView):
    model = SchoolProfile
    form_class = SchoolProfileForm
    context_object_name = 'school'
    template_name = 'profile/school_profile.html'

    def get_success_url(self, **kwargs):
        return reverse(
            'profile_edit',
            kwargs={'pk': self.object.id})

urls.py

urlpatterns = [
    url(r'^create$',
        views.SchoolProfileView.as_view(),
        name='profile_create'), ]

Using the 'Admin' interface I can fill the create form, but after I submit 'save' I get the following error:

Internal Server Error: /admin/profile/schoolprofile/add/
Traceback (most recent call last):
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: Perfil 
Escolar.create_date

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/options.py", line 551, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/sites.py", line 224, in inner
return view(request, *args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/options.py", line 1508, in add_view
return self.changeform_view(request, None, form_url, extra_context)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/utils/decorators.py", line 67, in _wrapper
return bound_func(*args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/utils/decorators.py", line 63, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/options.py", line 1408, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/options.py", line 1448, in _changeform_view
self.save_model(request, new_object, form, not add)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/contrib/admin/options.py", line 979, in save_model
obj.save()
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/base.py", line 807, in save
force_update=force_update, update_fields=update_fields)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/base.py", line 837, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/base.py", line 923, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/base.py", line 962, in _do_insert
using=using, raw=raw)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/query.py", line 1076, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 1107, in execute_sql
cursor.execute(sql, params)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/utils.py", line 80, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
  File "/Users/francisco.benavides/.pyenv/versions/django311/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: Perfil Escolar.create_date

It seems your date time filed(create_date) is not null ,i think not assign date filed value, there are two handle this error

If the datetime field required,you can do like

class SchoolProfile(models.Model):
        create_date = models.DateTimeField(
                   null=False, blank=False,
                   verbose_name=u'Fecha de creación',auto_now_add=True)

i have add extra key word in create_date filed when insert new record its takes current date time your local timezone

If datetime filed not required

class SchoolProfile(models.Model):
        create_date = models.DateTimeField(
                   null=True, blank=True,
                   verbose_name=u'Fecha de creación')

That error happened because you gave no value to a NOT NULL field. In your case the NOT NULL field is 'created_date' and 'modification_date'

You can use auto_now-add=True to make it automatically get the current system time for the field ONLY when the object is created. So you can use itfor created_date since it only get updated at object creation.

In case of modification_date, it needs to be updated at all modifications done on the object. For this 'auto_now=True' can be used.

It would look like this:

  class SchoolProfile(models.Model):
          created_date = models.DateTimeField(null=False, blank=False, auto_now_add=True, verbose_name='Fecha de creación')
          modification_date = models.DateTimeField(
    null=False, blank=False, auto_now=True,
    verbose_name=u'Fecha de última modificación')
           #Remaining code.....

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM