Skip to content

OneToOneField relationship : NOT NULL constraint failed

My User model is completed by a UserProfile :

class UserProfile(Model):
    photo = models.URLField()
    user = models.OneToOneField(User)

If I try to edit a user profile and its photo, sending the following parameters :

[
  {
    "@id": "_:b975",
    "http://happy-dev.fr/owl/#photo": "https://www.nosdeputes.fr/depute/photo/damien-abad/160"
  },
  {
    "@id": "http://127.0.0.1:8000/api/users/2/",
    "http://happy-dev.fr/owl/#first_name": "Alexandre",
    "http://happy-dev.fr/owl/#last_name": "Bourlier",
    "http://happy-dev.fr/owl/#username": "alex",
    "http://happy-dev.fr/owl/#userprofile": {
      "@id": "_:b975"
    }
  }
]

I get the following error :

IntegrityError at /api/users/2/
NOT NULL constraint failed: data_manager_userprofile.user_id

Request Method: PUT
Request URL: http://127.0.0.1:8000/api/users/2/
Django Version: 1.11.20
Python Executable: /usr/bin/python3
Python Version: 3.6.7
Python Path: ['/var/www/united4earth', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/alex/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
Server time: lun, 20 Mai 2019 22:47:25 +0200
Installed Applications:
['united4earth',
 'data_manager',
 'djangoldp_conversation',
 'djangoldp',
 'guardian',
 'registration',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 '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/alex/.local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py" in execute
  328.         return Database.Cursor.execute(self, query, params)
  
    
      The above exception (NOT NULL constraint failed: data_manager_userprofile.user_id) was the direct cause of the following exception:
    
  

File "/home/alex/.local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/alex/.local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/alex/.local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/viewsets.py" in view
  116.             return self.dispatch(request, *args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/djangoldp/views.py" in dispatch
  136.         response = super(LDPViewSet, self).dispatch(request, *args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
  495.             response = self.handle_exception(exc)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
  455.             self.raise_uncaught_exception(exc)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
  492.             response = handler(request, *args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/djangoldp/views.py" in update
  154.         response = super().update(request, *args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/mixins.py" in update
  70.         self.perform_update(serializer)

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/mixins.py" in perform_update
  80.         serializer.save()

File "/home/alex/.local/lib/python3.6/site-packages/rest_framework/serializers.py" in save
  209.             self.instance = self.update(self.instance, validated_data)

File "/home/alex/.local/lib/python3.6/site-packages/djangoldp/serializers.py" in update
  439.                     value = self.internal_create(validated_data=value, model=manager._meta.model)

File "/home/alex/.local/lib/python3.6/site-packages/djangoldp/serializers.py" in internal_create
  418.         instance = model.objects.create(**validated_data)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/query.py" in create
  394.         obj.save(force_insert=True, using=self.db)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/base.py" in save
  808.                        force_update=force_update, update_fields=update_fields)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/base.py" in save_base
  838.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/base.py" in _save_table
  924.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/base.py" in _do_insert
  963.                                using=using, raw=raw)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/query.py" in _insert
  1079.         return query.get_compiler(using=using).execute_sql(return_id)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/models/sql/compiler.py" in execute_sql
  1112.                 cursor.execute(sql, params)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  79.             return super(CursorDebugWrapper, self).execute(sql, params)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/utils.py" in __exit__
  94.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

File "/home/alex/.local/lib/python3.6/site-packages/django/utils/six.py" in reraise
  685.             raise value.with_traceback(tb)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

File "/home/alex/.local/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py" in execute
  328.         return Database.Cursor.execute(self, query, params)

Exception Type: IntegrityError at /api/users/2/
Exception Value: NOT NULL constraint failed: data_manager_userprofile.user_id
Edited by Ghost User