Django OperationalError:没有此类列:在pythonanywhere上

时间:2018-12-20 06:13:50

标签: python django operationalerror

首先,我能够修复ImportError。我发现这是因为pythonanywhere的Django版本未更新,所以我将pythonanywhere上的Django从1.x.x升级到了2.0.9。

错误是这样发出的:

  

ImportError位于/       无法导入名称“路径”

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

不幸的是,我的应用给了我另一个错误:

  

OperationalError位于/       没有这样的列:blog_post.published_date       请求方法:GET       要求网址: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   在执行中,第303行       Python可执行文件:/ usr / local / bin / uwsgi       Python版本:3.6.6

我认为此错误是由于某些数据库而发生的,所以我在pythonanywhere上尝试了migratemakemigrations,但仍无法解决。

那么,有谁知道如何修复此数据库?

这是我的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

2 个答案:

答案 0 :(得分:0)

我所看到的问题必须与数据库和Django迁移有关。

博客中的Post对象具有django试图查找的属性。迁移尚未正确地应用于数据库。

现在考虑迁移的历史,除非我能查看您假设是sqlite的数据库,否则不知道出了什么问题。

如果您有一个新建的数据库,解决此问题的一种方法是摆脱该数据库并执行以下操作:

  • app/migrations目录删除所有迁移
  • python manage.py makemigrations
  • python manage.py migrate

此外,请尽量避免使用sqlite。在sqlite db上运行的相同迁移在Postgres或MySQL数据库(生产级别更高的数据库)上可能是错误的。

注意:请理解,这将导致完全的数据丢失。因此,只有在可以承受现有/测试数据损失的情况下,才尝试使用此方法。

答案 1 :(得分:0)

如果您希望更改生效,请不要在每次迁移后刷新生产服务器