Ошибка при миграции с унаследованной базой данных в 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
Вернуться на верх