Django main.app_table__old Ошибка при удалении элемента
Я столкнулся с этой проблемой и перепробовал много решений, но ни одно не работает для меня или не подходит для моего случая.
Сначала я использую Django==2.0 (не могу перейти на версию из-за проблем).
У меня есть таблица модели table
и мое приложение app
при разработке случилось так, что я не могу удалить ни один элемент в этой таблице (остальные работают нормально). и я получил эту проблему.
OperationalError at /fieldsdetails/25/delete/
no such table: main.app_table__old
Я попытался удалить всю историю миграций, поэтому db.sqlite3 и запустить:
python manage.py makemigrations
python manage.py migrate
Затем я попытался удалить таблицу как
python manage.py dbshell
SELECT * FROM sqlite_master WHERE type='table';
затем я нашел таблицу с именем app_table__old
и удалил ее, используя следующее:
DROP TABLE app_table__old
.exit
но ничего не помогает?
есть ли какое-нибудь решение, я не хочу обновлять версию Django или терять данные.
Я только что обнаружил хитрый способ решить эту проблему без потери или изменения или обновления Django.
Проблема возникает, когда sqlite потерял часть информации в базе данных.
Для решения проблемы выполните следующие действия:
1- перейдите к таблицам вашей модели и найдите другие таблицы, которые имеют ForeignKey или любое отношение к table
, например:
class table_Perimeter(models.Model):
Perimeter = models.ForeignKey( table, on_delete=models.CASCADE)
когда вы определите все таблицы, которые имеют связь с table. вам нужно устранить проблему в самой базе данных db.sqlite3
.
установите браузер SQLiteStudio с этого сайта https://sqlitestudio.pl/
затем перейдите к таблице Table_Perimeter и дважды щелкните на ней. вы увидите что-то вроде этого.
Двойной щелчок для повторной настройки ForeignKey, и вы увидите красный значок: Введите, чтобы сконфигурировать его снова
в этом окне выберите таблицу foreig table и Foreig id и нажмите применить
нажмите для фиксации изменений
Так что все будет работать идеально, просто запустите свой сервер :)