2015-09-09 3 views
1

У меня есть проект django, в котором есть много разных приложений. Мы удалили одно из приложений, и теперь, когда мы пытаемся удалить пользователя, он терпит неудачу, жалуясь на то, что таблица из этого приложения не существует. Нет ссылок на это приложение или таблицу в любом месте. Тестирование, я обнаружил, что если я создаю таблицу, ошибка исчезнет.не удается удалить пользователя после удаления приложения

После поиска в Интернете и поиска я подумал, что понял это. Приложение было указано в файле django_content_type, а в content_type_id указано значение auth_permission. Поэтому я удалил строки с этим content_type_id из auth_permission и auth_permission, но я все еще получаю ошибку.

Что мне нужно сделать, чтобы удалить ссылки на это приложение, чтобы я мог удалять пользователей?

Вот полный трассировки стека:

Traceback: 
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/options.py" in wrapper 
    372.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 
    89.   response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/sites.py" in inner 
    202.    return view(request, *args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/utils/decorators.py" in _wrapper 
    25.    return bound_func(*args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/utils/decorators.py" in _wrapped_view 
    91.      response = view_func(request, *args, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/utils/decorators.py" in bound_func 
    21.     return func(self, *args2, **kwargs2) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/options.py" in changelist_view 
    1205.     response = self.response_action(request, queryset=cl.get_query_set(request)) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/options.py" in response_action 
    960.    response = func(self, request, queryset) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/actions.py" in delete_selected 
    35.   queryset, opts, request.user, modeladmin.admin_site, using) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/util.py" in get_deleted_objects 
    109.  collector.collect(objs) 
File "/usr/lib/python2.6/site-packages/django/contrib/admin/util.py" in collect 
    160.    return super(NestedObjects, self).collect(objs, source_attr=source_attr, **kwargs) 
File "/usr/lib/python2.6/site-packages/django/db/models/deletion.py" in collect 
    225.     elif sub_objs: 
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in __nonzero__ 
    141.   return type(self).__bool__(self) 
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in __bool__ 
    135.    next(iter(self)) 
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in _result_iter 
    123.     self._fill_cache() 
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in _fill_cache 
    927.      self._result_cache.append(next(self._iter)) 
File "/usr/lib/python2.6/site-packages/django/db/models/query.py" in iterator 
    301.   for row in compiler.results_iter(): 
File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py" in results_iter 
    775.   for rows in self.execute_sql(MULTI): 
File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py" in execute_sql 
    840.   cursor.execute(sql, params) 
File "/usr/lib/python2.6/site-packages/django/db/backends/util.py" in execute 
    41.    return self.cursor.execute(sql, params) 
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py" in execute 
    130.    six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2]) 
File "/usr/lib/python2.6/site-packages/django/db/backends/mysql/base.py" in execute 
    120.    return self.cursor.execute(query, args) 
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py" in execute 
    173.    self.errorhandler(self, exc, value) 
File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py" in defaulterrorhandler 
    36.  raise errorclass, errorvalue 

Exception Type: DatabaseError at /admin/auth/user/ 
Exception Value: (1146, "Table 'motor.reflection_resource_listeners' doesn't exist") 
+0

У вас есть необычная настройка кеша? – e4c5

+0

Нет, ничего. –

+0

включить ведение журнала запросов django и посмотреть, что выполняется эквайер (django.db.backends в регистраторах). Возможно, вы уже сможете увидеть запрос в своих журналах mysql – e4c5

ответ

2

Чтобы полностью удалить приложение из Django вам нужно выполнить следующие действия:

  1. удалить все ссылки на приложение из всех других приложений и модели, выполнять миграцию и применять их. (Это удалит все отношения внешних ключей с моделями, которые вы хотите удалить)

  2. Прокомментируйте все модели для приложения, которое вы хотите удалить, а затем выполните миграцию и примените их. (Это приведет к удалению всех таблиц для моделей, которые вы хотите удалить)

  3. После того, как все ссылки в других приложениях были удалены, а само приложение не имеет моделей, вы можете удалить файлы для всего приложения.

  4. Наконец, вам нужно избавиться от всех записей ContentType, которые были созданы при первом запуске миграции. Вы можете сделать это, запустив скрипт, найденный здесь: Remove Content Types

+0

Спасибо за ответ. Первые три шага, которые я уже сделал. Это был 4-й шаг, который мне нужно было сделать. –

Смежные вопросы