发生一些错误后,我删除了我的数据库,删除了所有的迁移文件(我离开 init .py)。 现在,当我跑
n
但绝对否 表格(与我的应用相关)已创建。只有那些与django相关的是。 在迁移表中,我的应用程序迁移已标记完成,但没有创建表,正如我所说,这非常令人不快。
以下是我的迁移文件的摘录:
python migrate.py makemigrations // It creates migrations correctly
python migrate.py migrate // It outputs "app.0001_initial OK"
你知道如何解决它吗?
答案 0 :(得分:29)
python manage.py migrate --fake APPNAME zero
这会使您的迁移变为假冒。 现在您可以运行迁移脚本
python manage.py migrate APPNAME
将创建表格 你解决了问题..干杯!!!
答案 1 :(得分:14)
来自Django docs,Options.managed
:"如果为False,则不会对此模型执行数据库表创建或删除操作。"
我看到你有
options={
'db_table': 'tblclients',
'managed': False,
},
尝试在模型中设置managed=True
。
答案 2 :(得分:6)
就我而言,创建表格的是:
python manage.py migrate --run-syncdb
我正在使用Django 1.9.6。
答案 3 :(得分:2)
我面临同样的问题:
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
No migrations to apply.
按照以下步骤为您的应用创建表格。
转到您的应用文件夹
1.删除迁移文件夹。
2.python manage.py makemigrations。
3将0001_initial.py文件重命名为0001_initial_manual.py。
4 python manage.py迁移APPNAME。
在此之后我的表格顺利创建。
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
Applying poll.0002_initial... OK
答案 4 :(得分:2)
我手动删除了其中一个表,对我有用的技巧是执行以下步骤:
注意:之前我没有执行#3步骤,也没有创建表。 我的Django版本:v3.0.5
答案 5 :(得分:1)
请检查您的项目中是否使用了多个数据库。如果配置了多个数据库,请检查默认数据库是您要寻找的数据库。
如果默认数据库和期望的数据库不同,请在指向您的数据库配置的命令下面运行。
python manage.py迁移$ app_name-数据库$ dbname_from_setting
希望这会有所帮助。
答案 6 :(得分:1)
首先尝试这个;
检查应用程序的迁移文件,如果迁移文件中包含 create model 部分,则将其删除并重做迁移。即删除此; migrations.CreateModel( name ='YourModelName', ....... .....)
(venv)root@debian:~/Desktop/project$ python manage.py makemigrations appName
(venv)root@debian:~/Desktop/project$ python manage.py migrate appName
其他;导航到您的数据库并删除该应用程序的所有迁移, 您可能还必须删除相关表。
postgres=# \c db_yourdb
db_yourdb=# delete from django_migrations where app='appName';
然后转到您的代码,然后
(venv)root@debian:~/Desktop/project$ python manage.py makemigrations appName
(venv)root@debian:~/Desktop/project$ python manage.py migrate appName
要完全进行新的迁移,请先对迁移进行必要的删除,然后在需要时删除表;
(venv)root@debian:~/Desktop/project$ find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
(venv)root@debian:~/Desktop/project$ find . -path "*/migrations/*.pyc" -delete
最后要做;
(venv)root@debian:~/Desktop/project$ python manage.py makemigrations
(venv)root@debian:~/Desktop/project$ python manage.py migrate
答案 7 :(得分:0)
这就是我如何得到@ JulienD的工作答案:
class thing(models.Model):
name = models.CharField(max_length=200)
class Meta:
app_label = 'things'
managed = True
python manage.py makemigrations
python manage.py migrate
之后python manage.py showmigrations
显示迁移,管理网站开始工作。
答案 8 :(得分:0)
此问题的答案取决于您的应用文件夹中是否已有迁移历史记录。就我而言,我没有……我想我删除了原始迁移脚本。
python manage.py makemigrations yourapp
python manage.py migration --fake-initial
按照Workflow部分中的步骤进行操作...
python manage.py makemigrations yourapp
python manage.py迁移
答案 9 :(得分:0)
我也有这个问题,我所要做的就是解决它(我使用的是 phpymyadmin):
1.进入 phpmyadmin 面板
选择我连接的数据库,并清空名为 django_migrations 的表
然后,我照常做了:python manage.py makemigrations app_name
最后:python manage.py migrate app_name
瞧,完成并准备好了;)
答案 10 :(得分:0)
这在 Django v.3 中有效:
从数据库中删除与您的应用程序相关的行:
DELETE FROM django_migrations WHERE app='<app_name>';
删除应用的迁移文件夹
终于
./manage.py makemigrations <app_name>
./manage.py migrate <app_name>
完成。表已创建。