Ошибка при миграции с унаследованной базой данных в Django
Я работаю над созданием фильтра в django, в котором отображаемые опции поступают из нового столбца в базе данных. Оказалось, что этот столбец был создан непосредственно в базе данных, и чтобы он мог отображаться в моем шаблоне, мне нужно захватить это поле в модели.
После некоторых исследований я нашел в документации django функцию под названием "inspectdb", которая вызывается файлом manage.py. Пока все хорошо, после выполнения функции поля базы данных добавляются в мой проект так, что они могут быть направлены в соответствующие app.models.
В документации указано, что я должен выполнить миграцию python manage.py для завершения синхронизации, именно в этом фрагменте кода и возникает проблема. При выполнении миграции я получаю следующую ошибку: "django.db.utils.ProgrammingError: relation "crontabmanager" already exists"
Таблица "crontabmanager" действительно существует в моей базе данных, но в данный момент она не изменяется.
Были предприняты некоторые действия, чтобы попытаться обойти эту проблему, например:
- Я попытался проигнорировать миграцию и использовать новое поле непосредственно в системе, но он возвращает сообщение о том, что новый столбец не существует .
- Удалите файл миграции и создайте новый "makemigration"
- Удалите таблицу "crontabmanager" из базы данных, чтобы django воссоздал ее через ORM .
- Изменение свойств models.py для игнорирования внесенных изменений
Ниже приведен фрагмент моего текущего кода models.py:
from django.db import models
class Crontab(models.Model):
client = models.TextField('Cliente', blank=True, null=True)
script = models.TextField('Nome do script', primary_key=True)
schedule_code = models.TextField('Codigo Crontab', blank=True, null=True)
crontab_command = models.TextField("Comando", blank=True, null=True)
log = models.TextField("Log", blank=True, null=True)
class Meta:
verbose_name = 'Crontab'
verbose_name_plural = 'Crontab'
db_table = "crontabmanager"
class Trello(models.Model):
id_card = models.TextField('ID do Card', primary_key=True)
card_name = models.TextField('Nome do Card', blank=True, null=True)
due_date = models.TextField('Data de conclusão', blank=True, null=True)
list_name = models.TextField('Nome da lista', blank=True, null=True)
tipo_corte = models.TextField('Tipo do corte', blank=True, null=True)
cortes = models.TextField('Numero de cortes', blank=True, null=True)
unidade = models.CharField(max_length=200, blank=True, null=True) #new field added
class Meta:
db_table = "trello_pta"
ошибка при запуске python manage.py migrate
$ python3 manage.py migrate
Operations to perform:
Apply all migrations: accounts, admin, auth, contenttypes, core, sessions, users
Running migrations:
Applying core.0002_initial...Traceback (most recent call last):
File "/home/file_names/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 87, in _execute
return self.cursor.execute(sql)
psycopg2.errors.DuplicateTable: relation "crontabmanager" already exists
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
...
return self.cursor.execute(sql)
django.db.utils.ProgrammingError: relation "crontabmanager" already exists