Django OperationalError 'нет такого столбца:' sqlite - PullRequest
2 голосов
/ 01 мая 2020

Для моей основы c, элементарной Django CMS, в моей попытке добавить функцию переключения к публикации в блоге sh / unpubli sh (я назвал свое приложение «эссе» и классом). объект в моих моделях - is_published), я столкнулся с ошибкой OperationalError при попытке использовать панель администратора для добавления содержимого эссе. Я ожидаю, что смогу установить флажок для публикации / отмены публикации sh, но теперь я даже не могу получить доступ к панели инструментов.

Вот часть трассировки с моего сервера Django:

File "/home/<user>/dev/projects/python/2018-and-2020/<projectdir>/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/home/<user>/dev/projects/python/2018-and-2020/<projectdir>/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: essays_essayarticle.is_published

Отладочная трассировка усиливает приведенную выше ошибку OperationalError:

OperationalError at /admin/essays/essayarticle/
no such column: essays_essayarticle.is_published

Request Method: GET
Request URL: http://<DN>.ngrok.io/admin/essays/essayarticle/
Django Version:2.2.11
Exception Type: OperationalError
Exception Value:
no such column: essays_essayarticle.is_published
Exception Location:
/home/<user>/dev/projects/python/2018-and-2020/<projectdir>/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py in execute, line 383
Python Executable:
/home/<user>/dev/projects/python/2018-and-2020/<projectdir>/venv/bin/python
`Fri, 1 May 2020 19:37:31 +0000

Значение исключения указывает «нет такого столбца», что является ссылкой на мою базу данных. Я использую SQlite3 для тестирования. До этого OperationalError я устранял проблемы с DummyNode и «isinstance django .db.migrations.exceptions.NodeNotFoundError: Migration». Предыдущее решение, к которому я пришел, было удалить мои миграции в двух из моих приложений. Этот SO-ответ является частным решением, которое решило проблему: { ссылка }

В соответствии с предложением @ Laila Buabbas , чтобы уточнить, я удалил каталог моей миграции и вызвал: python manage.py makemigrations app_name для каждого из моих двух приложений. Так что предыдущая проблема SQLite была решена. Но я не могу понять этот новый OperationalError, описанный выше.

Проблема связана с моим views.py / models.py (скопировано ниже)? Я не могу сузить это более конкретно c, чем это. Вот часть класса, определенного в моем файле models.py (с новой строкой потенциальной проблемы, добавленной в конце):

class EssayArticle(models.Model):
   title = models.CharField(max_length=256)
   web_address = models.CharField(max_length=256)
   web_address_slug = models.SlugField(blank=True, max_length=512)
   content = models.TextField(blank=True)
   is_published = models.BooleanField(default=True)

Вот соответствующие строки из соответствующей функции в моем views.py:

def article(request, web_address):
   try:
       article = EssayArticle.objects.get(
           web_address_slug=web_address)  # .filter(is_published=True)
   except EssayArticle.DoesNotExist:
       raise Http404('Article does not exist!')
   context = {
       'article': article,
   }
   return render(request, 'essays/article.html', context)

Комментирование в нашей работе .filter(is_published=True) не останавливает и не изменяет ошибку отладки.

Мой локальный блок разработчика - Manjaro Linux с Django v2.2.11. Я использую Python v3.8.2.

Вот некоторые ресурсы, которые я уже использовал:

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

Нет столбца is_published в таблице essays_essayarticle вашей БД, попробуйте добавить столбец в БД, добавив новую миграцию, и просмотрите изменение для таблицы, будет ли этот столбец добавлен.

Ошибка отсутствует на ваш взгляд, скорее, это вопрос.

1 голос
/ 08 мая 2020

Похоже, ваша миграция с тем же именем уже запущена, поэтому Django не может создать новый столбец,

Вы должны заглянуть в таблицу django_migrations в базе данных поиска и удаления миграционная запись. Вам нужно сравнить ваши миграции с django_migrations в базе данных, тогда только вы найдете проблему / ошибку, которую вы получаете

Как только вы удалите миграцию из django_migrations в базе данных, запустите миграцию

./manage.py migrate

тогда ваша проблема может быть решена

0 голосов
/ 02 мая 2020

Я предполагаю, что вы удалили папку миграций, если это так, когда вы выполняете миграции и мигрируете, напишите название вашего приложения в конце

пример

python manage.py makemigrations app_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...