После переписывания моделей Django для удаления ненужных первичных ключей появилось сообщение об ошибке InvalidCursorName
После того, как я узнал, что большинство моих первичных ключей не обязательно должны быть жестко закодированы в моделях Django, я решил удалить их все. Для того чтобы Django-admin заработал, мне нужно было сначала решить несколько проблем, что я и сделал, удалив все файлы миграций.
После устранения этих проблем, после выполнения миграций и повторной успешной миграции, в админке Django при попытке добавить данные в определенную модель, сразу после нажатия кнопки добавления я получил следующее сообщение об ошибке:
Traceback (most recent call last):
File "C:\Users\fsoar\urban_forest_box\virtualenv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedColumn: column app_species_catalog_nome_popular.id does not exist
LINE 1: ...188_sync_1" NO SCROLL CURSOR WITH HOLD FOR SELECT "app_speci...
Это привело к серии исключений, которые привели к другой серии исключений, последним сообщением об ошибке было:
psycopg2.errors.InvalidCursorName: cursor "_django_curs_17188_sync_1" does not exist
models.py немного длинный, поэтому я вставляю только основную модель этого приложения, которую я использовал для добавления данных, когда это произошло, и которая говорит сама за себя относительно моего уровня владения Python/Django :)
Я хотел бы понять, что происходит, и я представляю, что пройдет несколько месяцев, прежде чем я доберусь до этого, но самое главное, я хотел бы сначала исправить это, чтобы продолжить мой путь обучения.
# ARVORE
class Img_Arvore(models.Model):
img_arvore = models.ImageField(upload_to=r'urban_forest_django_project\uploads\img_arvores_completas')
class Meta:
verbose_name = "Foto da árvore"
verbose_name_plural = "Fotos da árvore"
class Arvore(models.Model):
nome_cientifico = models.CharField("Nome científico", max_length=200, help_text="Nome científico completo", primary_key=True)
nomes_populares = models.ManyToManyField(Nome_Popular, verbose_name="Nomes populares")
estados_de_conservacaos = (
('EX', 'Extinta'),
('EW', 'Extinta no ambiente silvestre'),
('CR', 'Criticamente em perigo'),
('EN', 'Em perigo'),
('VU', 'Vulnerável'),
('NT', 'Quase ameaçada'),
('LC', 'Menos preocupante'),
('DD', 'Dados insuficientes'),
('NE', 'Não avaliado')
)
estado_de_conservacao = models.CharField("Estado de conservação", max_length=50, choices=estados_de_conservacaos)
botanic_description = models.TextField('Descrição botânica', blank=True)
create_date = models.DateTimeField(auto_now_add=True)
update_date = models.DateTimeField(blank=True, null=True)
taxonomia = models.OneToOneField(Taxonomia, on_delete=SET_NULL, null=True, blank=True)
biotipo = models.ForeignKey(Biotipo, on_delete=SET_NULL, null=True, blank=True)
dendrometria = models.ForeignKey(Dendrometria, on_delete=SET_NULL, null=True, blank=True)
peculiaridades = models.ForeignKey(Peculiaridade, on_delete=SET_NULL, null=True, blank=True)
caule = models.ForeignKey(Caule, on_delete=SET_NULL, null=True, blank=True)
raiz = models.ForeignKey(Raiz, on_delete=SET_NULL, null=True, blank=True)
folha = models.ForeignKey(Folha, on_delete=SET_NULL, null=True, blank=True)
flor = models.ForeignKey(Flor, on_delete=SET_NULL, null=True, blank=True)
fruto = models.ForeignKey(Fruto, on_delete=SET_NULL, null=True, blank=True)
distribuicao_estadual = models.ManyToManyField(UF_Brasileira, blank=True)
distribuicao_regional = models.ManyToManyField(Regiao_Brasileira, blank=True)
dominio_fitogeografico = models.ManyToManyField(Bioma_Brasileiro, blank=True)
vegetacao_encontrada = models.ManyToManyField(Vegetacao_Brasileira, blank=True)
maiores_informacoes = models.ForeignKey(Link_Externo, on_delete=SET_NULL, null=True, blank=True)
class Meta:
verbose_name = "Árvore"
verbose_name_plural = "Árvores"
def __str__(self):
return self.nome_cientifico
Вы также сбросили (удалили) свою базу данных? Ваша база данных меняется с миграциями, поэтому если вы удалите миграции, но не удалите базу данных, база данных будет путаться, потому что она не синхронизирована с вашим приложением django. Попробуйте запустить его на другой базе данных, но не забудьте сделать makemigration, а также migrate.
<<<Вы должны думать о миграциях как о системе контроля версий для схемы вашей базы данных. makemigrations отвечает за упаковку изменений вашей модели в отдельные файлы миграции - аналогично коммитам - а migrate отвечает за применение этих файлов к вашей базе данных..
Для получения дополнительной информации : https://docs.djangoproject.com/en/3.2/topics/migrations/