python manage.py migrate不对postgres数据库进行任何更改

时间:2015-07-30 04:34:37

标签: django postgresql openshift django-migrations

这似乎是一个简单的问题,我不确定我做错了什么。 例如,如果我想通过更改:

在models.py中的某个类中添加新字段
class FeedBack(models.Model):
    feedback = models.CharField(max_length=600)
    user = models.ForeignKey(User,default="")

class FeedBack(models.Model):
    feedback = models.CharField(max_length=600)
    email = models.CharField(max_length=100)
    user = models.ForeignKey(User,default="")

然后我跑

python manage.py makemigrations

python manage.py migrate

并且一切似乎都很好,但实际上数据库中没有进行任何更改。在尝试查看反馈表时,我收到以下异常:

列IngressoMonitor_feedback.email不存在

在表格中也使用psql \ d +显示尚未添加电子邮件

现在我可以使用psql来添加和更改表格,但我更喜欢在models.py中编写它,因为这对我来说似乎更容易。

2 个答案:

答案 0 :(得分:1)

确保包含该models.py文件的应用包含在项目设置文件的INSTALLED_APPS中。此外,除非您确定知道自己在做什么,否则请不要触摸应用程序迁移文件夹下的文件。另请确保您的设置文件中指定的数据库帐户具有必要的权限。

如果您最近更改了Django版本,则此link可能对您有用。但无论如何都要试一试,并在这种情况下进行每个应用程序的迁移:

python manage.py makemigrations app_name

如果所有其他方法都失败了,只需删除数据库的表,然后从头开始重新生成所有内容。但是,如果在某些时候,您与任何迁移文件混乱,您可能希望在执行makemigrations之前删除所有迁移文件,以确保您拥有manage.py可以使用的一组新的有效的迁移文件。

答案 1 :(得分:0)

您可能需要重设数据库用户或所有者密码,然后重试。在我的系统中,我必须重置默认的postgres用户,以使其不使用通过此链接here的命令行中的任何密码。

然后尝试运行命令:python manage.py migrate,现在可以正常运行了。

别忘了还要从django项目中设置配置:myprojectname / myprojectname / settings.py文件。这里的例子是我的;

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'polling_db',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}