Django OperationalError: нет такой колонки: на pythonanywhere

Сначала я смог исправить ошибку ImportError. Я понял, что это потому, что версия pythonanywhere Django не обновляется, поэтому я обновил Django на pythonanywhere с 1.xx до 2.0.9.

Ошибка вышла так:

Ошибка импорта в / не может импортировать имя "путь"

django version: 1.x.x
python version: 3.6.6

и, к сожалению, мое приложение дало мне еще одну ошибку:

OperationalError в / нет такого столбца: blog_post.published_date Метод запроса: GET URL-адрес запроса: http: // .pythonanywhere.com / Django Версия: 2.0.9 Тип исключения: OperationalError Значение исключения:
нет такого столбца: blog_post.published_date Расположение исключения: / home / /my-first-blog/myenv/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py в execute, строка 303 Исполняемый файл Python: /usr/local/bin/uwsgi Python Версия: 3.6.6

Я думал, что эта ошибка произошла из-за какой-то базы данных, поэтому я попытался migrate или же makemigrations на pythonanywhere, но я не мог исправить это до сих пор.

Итак, есть кто-нибудь, кто знает, как исправить эту базу данных?

Вот мой model.py :

from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

вот вывод python manage.py showmigrations :

admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
 [X] 0009_alter_user_last_name_max_length
blog
 [X] 0001_initial
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

1 ответ

Решение

Проблема, как я вижу, должна быть связана с миграцией базы данных и django.

Post Объект внутри блога имеет атрибут, который пытается найти Джанго. Миграции не были правильно применены к базе данных.

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

Один из способов решить эту проблему, если у вас новая база данных, - это избавиться от базы данных и сделать следующее:

  • Удалить все миграции из app/migrations каталог
  • python manage.py makemigrations
  • python manage.py migrate

Также старайтесь избегать sqlite как можно больше. Те же самые миграции, которые бежали на sqlite DB может быть ошибочным в базе данных Postgres или MySQL, которые являются более производительными базами данных.

ПРИМЕЧАНИЕ: пожалуйста, поймите, что это приведет к полной потере данных. Следовательно, попробуйте это, только если вы можете позволить себе пойти на компромисс с существующими / тестовыми данными.

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

Другие вопросы по тегам