GVKun编程网logo

Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”

15

对于想了解Django1.7-在进行makemigrations后运行迁移时,“无适用迁移”的读者,本文将是一篇不可错过的文章,并且为您提供关于Django-makemigrations-未检测到更改

对于想了解Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”的读者,本文将是一篇不可错过的文章,并且为您提供关于Django - makemigrations - 未检测到更改、Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换、Django 1.7-makemigrations无法检测到更改、Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途的有价值信息。

本文目录一览:

Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”

Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”

我将Django1.7与夹层一起使用。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中:

class RoadmapProfile(models.Model):    user = models.OneToOneField("auth.User")    fullname = models.CharField(max_length=100, verbose_name="Full name")

创建迁移会返回:

  Migrations for ''profiles'':      0001_initial.py:        - Create model RoadmapProfile

当我运行“迁移配置文件”时:

Operations to perform:  Apply all migrations: profilesRunning migrations:  No migrations to apply.

问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示:

OperationalError at /accounts/update/no such column: profiles_roadmapprofile.fullname

我做错了什么?

答案1

小编典典

听起来您的初始迁移被伪造了,因为该表已经存在(可能具有过期的架构):

https://docs.djangoproject.com/zh-CN/1.7/topics/migrations/#adding-
migrations-to-
apps

“这将为您的应用程序进行新的初始迁移。现在,当您运行migration时,
Django将检测到您已经进行了初始迁移,并且它想要创建的表已经存在,并将迁移标记为已应用 。”

否则你会得到一个没有这样的表错误:)

[编辑]您是否清理了已应用的迁移表?这也是非应用迁移的常见原因。

Django - makemigrations - 未检测到更改

Django - makemigrations - 未检测到更改

我试图使用 makemigrations 命令在现有应用程序中创建迁移,但它输出“未检测到更改”。

通常我使用该startapp命令创建新应用程序,但在创建该应用程序时并未将其用于该应用程序。

调试后,我发现它没有创建迁移,因为migrations应用程序中缺少包/文件夹。

如果它不存在或我遗漏了什么,它会创建文件夹会更好吗?

答案1

小编典典

要为应用创建初始迁移,请运行makemigrations并指定应用名称。将创建迁移文件夹。

./manage.py makemigrations <myapp>

您的应用程序必须首先包含在其中INSTALLED_APPS(在 settings.py 中)。

Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换

Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换

在1.6之前, Django只支持添加新的model到数据库, 而无法编辑或修改已经存在的model. 在当时, 这些Django缺失的功能可以通过South实现.

按照官方文档的说明,支持得最好的是postgresql数据库,其次是mysql,目前sqlite不能实现完整的migration功能。

1. 新的命令

Django 1.7 为我们带来了三个新命令:

  • migrate: 用于执行迁移动作

  • makemigrations: 基于当前的model创建新的迁移策略文件

  • sqlmigrate: 显示迁移的SQL语句

值得注意的是, migration是基于App的, 因此, 我们可以针对某些app不启用migration功能.

2. 如何使用

migrations的使用非常简单: 修改model, 比如增加field, 然后运行

    python manager.py makemigrations

你的mmodel会被扫描, 然后与之前的版本作比较, 在app的migrations目录下生成本次迁移文件.

我们建议查看一下该迁移文件, 确保没有问题. 然后运行:

    python manager.py migrate

migrate命令会进行比较, 并应用该迁移.

3. 从South到新的Django migrations

如果想从south升级到最新的django migration, 可以按以下步骤实现:

  • 确保south中的migration全部被应用了

  • 从 INSTALLED_APPS中移除south

  • 删除每个app下migration目录中的所有文件, 除了__init__.py

  • 运行python manager.py makemigrations, Django会初始化migration

  • 运行python manager.py migrate, django会发现数据库和初始化的migration相同, 从而将他们标记为已应用


Django 1.7-makemigrations无法检测到更改

Django 1.7-makemigrations无法检测到更改

如何解决Django 1.7-makemigrations无法检测到更改?

如果要从django 1.6中制作的现有应用程序进行转换,则需要执行文档中列出的一个步骤(据我所知):

python manage.py makemigrations your_app_label

该文档没有明确表明你需要在命令中添加应用标签,因为它首先告诉你要做的是python manage.py makemigrations失败。最初的迁移是在1.7版中创建的应用程序完成的,但是如果你来自1.6版,则不会进行。

解决方法

如标题所述,我似乎无法使迁移正常进行。

该应用程序最初的版本低于1.6,因此我了解到最初不会进行迁移,如果运行,python manage.py migrate我会得到:

Operations to perform:
  Synchronize unmigrated apps: myapp
  Apply all migrations: admin,contenttypes,auth,sessions
Synchronizing apps without migrations:
  Creating tables...
  Installing custom SQL...
  Installing indexes...
Running migrations:
  No migrations to apply.

如果我对中的任何模型进行了更改myapp,它仍会像预期的那样未迁移。

但是如果我跑步,python manage.py makemigrations myapp我会得到:

No changes detected in app ''myapp''

似乎与我运行命令的方式或方式无关紧要,它永远不会将应用程序检测为更改,也不会向应用程序添加任何迁移文件。

是否有任何方法可以迫使应用程序迁移并实质上说“这是我的工作基础”或其他内容?还是我错过了什么?

如果有帮助的话,我的数据库就是PostgreSQL。

Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途

Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途

 

 

 

生成一个临时文件

python manage.py makemigrations  

 

这时其实是在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py

 

 

数据库文件数据库没有增加新的表">但是这个改动还没有作用到数据库文件,数据库没有增加新的表

 

接着执行migrate,这时候才真的把作用到数据库文件,产生对应的表

 

根据临时文件生成数据库表

python manage.py migrate

 

执行这两条命令自动帮我们创建数据库和基本表

 

还可以利用这条命令修改djang orm 表结构

 

现在把models.py 表结构 字段 最大长度64 修改成60

from django.db import models

# Create your models here.

# 必须继承
# 表名叫cmdb_userinfo
class UserInfo(models.Model):

    # django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql

    # 用户名列,数据类型 字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

 

 

from django.db import models

# Create your models here.

# 必须继承
# 表名叫cmdb_userinfo
class UserInfo(models.Model):

    # django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql

    # 用户名列,数据类型 字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=60)

 

现在表结构变了,需要再执行  python manage.py makemigrations ,python manage.py migrate 自动更新表结构

python manage.py makemigrations
Migrations for ''cmdb'':
  cmdb\migrations\0002_auto_20181122_2336.py
    - Alter field password on userinfo

 

python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
  Applying cmdb.0002_auto_20181122_2336... OK

 

数据如果超过最大长度就丢了

 

总结 通过 python manage.py makemigrations , python manage.py migrate 都可以修改 表结构数据

关于Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Django - makemigrations - 未检测到更改、Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换、Django 1.7-makemigrations无法检测到更改、Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途的相关信息,请在本站寻找。

本文标签: