首页 > 解决方案 > Django - 迁移后未创建表

问题描述

我想使用 Postgres 数据库在 DigitalOcean 服务器上为我的 Django 项目添加新功能。问题是,在本地服务器上一切正常,但在生产服务器上,新模型的新表没有创建。我已删除所有迁移文件,再次进行迁移,但再次无法在数据库中看到新表。请帮我解决这个问题。我的确切错误:

relation "documents_app_employee" does not exist LINE 1: INSERT INTO "documents_app_employee" ("fin", "name", "surnam...

这是我的代码:

models.py

class Employee(models.Model):
    fin = models.CharField(max_length=10, blank=True, null=True)
    name = models.CharField(max_length=20)
    surname = models.CharField(max_length=20)

    def __str__(self):
        return self.name + " " + self.surname

forms.py

class CreateEmployeeForm(ModelForm):
    def save(self, commit=False):
        employee = super(CreateEmployeeForm, self).save(commit=False)
        Employee.objects.create(
            fin = employee.fin,
            name = employee.name,
            surname = employee.surname,
        )

    class Meta:
        model = Employee
        fields = '__all__'

删除和撤消迁移的脚本:

find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc"  -delete
pip3 uninstall django
pip3 install -r requirements.txt
python3 manage.py makemigrations
python3 manage.py migrate

但再次得到:

ProgrammingError at /employee_document

relation "documents_app_employee" does not exist
LINE 1: INSERT INTO "documents_app_employee" ("fin", "name", "surnam...

标签: djangopostgresqldjango-formsdigital-oceandjango-migrations

解决方案


在 pythonanywhere 上托管时迁移数据库时,我遇到了完全相同的问题。经过很多不同的方法,包括删除和撤消迁移并再次重做。

然后我最后使用了默认的db.sqlite3数据库并从中导出 SQL(使用 sqlite3 浏览器)并使用在线sql 转换器将其转换为 Postgresql并将我的项目连接到localhost postgres 数据库上,其中使用获得的 sql 查询创建表pgadmin中。

然后在将其推向生产时运行良好。

*抱歉,如果我的回答不是很清楚,我是作为用户而不只是作为浏览器的 stackoverflow 的新手。我会根据任何疑问编辑/评论我的答案。


推荐阅读