在 table "django_admin_log" 上插入或更新在管理中保存新模型时违反外键约束
Insert or update on table "django_admin_log" violates foreign key constraint when saving new model in admin
在管理中保存模型的新实例时,我在回溯中得到以下 IntegrityError:
Traceback:
File "/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
541. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
244. return view(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
1435. return self.changeform_view(request, None, form_url, extra_context)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in inner
184. return func(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/transaction.py" in __exit__
223. connection.commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in commit
242. self._commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in _commit
211. return self.connection.commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/utils.py" in __exit__
95. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in _commit
211. return self.connection.commit()
Exception Type: IntegrityError at /admin/app/invitation/add/
Exception Value: insert or update on table "django_admin_log" violates foreign key constraint "django_admin_log_user_id_52fdd58701c5f563_fk_auth_user_id"
DETAIL: Key (user_id)=(3) is not present in table "auth_user".
完全相同的代码在另一台机器上运行完美。
看起来我的 Django 用户 table 不知何故变得陈旧并且包含一个过时的主键。不幸的是,运行ning ./manage.py migrate
似乎没有解决任何问题,但是在 old Django trac ticket 的帮助下,我能够弄清楚如何轻松解决这个问题(警告,你会丢失您的管理日志)。
./manage.py migrate admin 0001
echo "DROP TABLE django_admin_log;" | ./manage.py dbshell
./manage.py sqlmigrate admin 0001 | python manage.py dbshell
./manage.py migrate admin
我确定我可以 运行 在 PostgreSQL 中进行更新以达到同样的效果,但我没有担心要保留的任何数据。
您似乎用另一个用户登录并更改了一些模型。所以您需要退出管理面板,然后重新登录!
这个解决方案对我来说效果很好。
您可以注释掉您更新的模型。并且 运行 使用以下命令进行迁移:
python manage.py makemigrations app.
现在取消注释模型并再次 运行 相同的 makemigrations 命令。所有详细信息也将从管理面板中删除。
删除数据库并重新创建它(Postgresql),它将解决问题。
在管理中保存模型的新实例时,我在回溯中得到以下 IntegrityError:
Traceback:
File "/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
541. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
244. return view(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
1435. return self.changeform_view(request, None, form_url, extra_context)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
67. return bound_func(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
149. response = view_func(request, *args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
63. return func.__get__(self, type(self))(*args2, **kwargs2)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/utils/decorators.py" in inner
184. return func(*args, **kwargs)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/transaction.py" in __exit__
223. connection.commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in commit
242. self._commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in _commit
211. return self.connection.commit()
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/utils.py" in __exit__
95. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/users/dan/project/venv/lib/python2.7/site-packages/django/db/backends/base/base.py" in _commit
211. return self.connection.commit()
Exception Type: IntegrityError at /admin/app/invitation/add/
Exception Value: insert or update on table "django_admin_log" violates foreign key constraint "django_admin_log_user_id_52fdd58701c5f563_fk_auth_user_id"
DETAIL: Key (user_id)=(3) is not present in table "auth_user".
完全相同的代码在另一台机器上运行完美。
看起来我的 Django 用户 table 不知何故变得陈旧并且包含一个过时的主键。不幸的是,运行ning ./manage.py migrate
似乎没有解决任何问题,但是在 old Django trac ticket 的帮助下,我能够弄清楚如何轻松解决这个问题(警告,你会丢失您的管理日志)。
./manage.py migrate admin 0001
echo "DROP TABLE django_admin_log;" | ./manage.py dbshell
./manage.py sqlmigrate admin 0001 | python manage.py dbshell
./manage.py migrate admin
我确定我可以 运行 在 PostgreSQL 中进行更新以达到同样的效果,但我没有担心要保留的任何数据。
您似乎用另一个用户登录并更改了一些模型。所以您需要退出管理面板,然后重新登录!
这个解决方案对我来说效果很好。
您可以注释掉您更新的模型。并且 运行 使用以下命令进行迁移:
python manage.py makemigrations app.
现在取消注释模型并再次 运行 相同的 makemigrations 命令。所有详细信息也将从管理面板中删除。
删除数据库并重新创建它(Postgresql),它将解决问题。