Questions tagged «django-migrations»

Django迁移是一种将更改应用于先前创建的数据库的方法,该数据库是Django 1.7中引入的。当修改模型(添加字段,删除模型等)并且需要将这些更改应用于数据库时,将使用此工具。

8
如何还原上一次迁移?
我进行了迁移,添加了一个新表,并希望还原该表并删除该迁移,而不创建新迁移。 我该怎么做?是否有命令还原上一次迁移,然后我可以简单地删除迁移文件?

12
用于重命名模型和关系字段的Django迁移策略
我打算重命名现有Django项目中的多个模型,在该项目中,还有许多其他模型与我要重命名的模型具有外键关系。我相当确定这将需要多次迁移,但是我不确定确切的过程。 假设我从Django应用程序中的以下模型开始myapp: class Foo(models.Model): name = models.CharField(unique=True, max_length=32) description = models.TextField(null=True, blank=True) class AnotherModel(models.Model): foo = models.ForeignKey(Foo) is_awesome = models.BooleanField() class YetAnotherModel(models.Model): foo = models.ForeignKey(Foo) is_ridonkulous = models.BooleanField() 我想重命名该Foo模型,因为该名称实际上没有意义,并且会导致代码混乱,并且Bar会使名称更清晰。 根据我在Django开发文档中阅读的内容,我假设采用以下迁移策略: 第1步 修改models.py: class Bar(models.Model): # <-- changed model name name = models.CharField(unique=True, max_length=32) description = models.TextField(null=True, blank=True) class AnotherModel(models.Model): foo …

29
Django 1.7-makemigrations无法检测到更改
如标题所述,我似乎无法使迁移正常进行。 该应用程序最初的版本低于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。

30
Django-makemigrations-未检测到更改
我试图使用makemigrations命令在现有应用程序中创建迁移,但输出“未检测到更改”。 通常,我使用startapp命令创建新应用,但在创建该应用时并未将其用于该应用。 调试后,我发现它没有创建迁移,因为migrations应用程序中缺少软件包/文件夹。 如果不存在该文件夹,还是创建丢失的文件夹,会更好吗?

5
Django-DB-Migrations:无法更改表,因为它具有未决的触发事件
我想从TextField中删除null = True: - footer=models.TextField(null=True, blank=True) + footer=models.TextField(blank=True, default='') 我创建了一个架构迁移: manage.py schemamigration fooapp --auto 由于某些页脚列包含,NULL因此error在运行迁移时会得到以下信息: django.db.utils.IntegrityError:“页脚”列包含空值 我将其添加到架构迁移中: for sender in orm['fooapp.EmailSender'].objects.filter(footer=None): sender.footer='' sender.save() 现在我得到: django.db.utils.DatabaseError: cannot ALTER TABLE "fooapp_emailsender" because it has pending trigger events 怎么了?

2
如何从Django 1.7的初始迁移迁移回去?
我用一些模型创建了一个新的应用程序,现在我发现一些模型没有经过深思熟虑。由于我尚未提交代码,因此明智的做法是将数据库迁移到最后的良好状态,并使用更好的模型重新进行迁移。在这种情况下,最后的良好状态是新应用程序不存在的数据库。 如何从Django 1.7的初始迁移迁移回去? 在South一个可以这样做: python manage.py migrate <app> zero <app>将从迁移历史记录中清除并删除的所有表<app>。 如何在Django 1.7迁移中做到这一点?

7
在Django 1.7中运行单元测试时禁用迁移
Django 1.7引入了数据库迁移。 在Django 1.7中运行单元测试时,它会强制进行迁移,这需要很长时间。因此,我想跳过django迁移,并以最终状态创建数据库。 我知道忽略迁移可能是一个坏习惯,因为该部分代码将不会进行测试。事实并非如此:我正在CI测试服务器(jenkins)中运行完整迁移。我只想在速度很重要的本地测试中跳过迁移。 一些背景: 直到Django 1.6为止,在使用South时,我使用SOUTH_TESTS_MIGRATE设置: 默认情况下,South的syncdb命令如果以非交互模式运行(包括运行测试的时间),也会应用迁移-它将在每次运行测试时运行每次迁移。 如果您希望测试运行程序使用syncdb而不是进行迁移(例如,如果迁移时间太长而无法应用),则只需在settings.py中设置SOUTH_TESTS_MIGRATE = False。 但是,syncdb不再存在,现在可以进行迁移。 从Django 1.8开始,我将使用--keepdb参数: --keepdb选项可用于在两次测试运行之间保留测试数据库。这具有跳过创建和销毁操作的优势,这大大减少了运行测试的时间,尤其是大型测试套件中的测试。如果测试数据库不存在,它将在第一次运行时创建,然后为以后的每次运行保留。在运行测试套件之前,所有未应用的迁移也将应用于测试数据库。 因此,此问题仅限于Django 1.7。

11
如何简化Django 1.7中的迁移?
南方已经有类似的问题,但是我从Django 1.7开始了我的项目,并且没有使用南方。 在开发过程中,创建了许多迁移,但是尚未发布该软件,并且不存在必须迁移的数据库。因此,我想将迁移重置为好像当前模型是原始模型一样,然后重新创建所有数据库。 建议这样做的方法是什么? 编辑:自Django 1.8起,有一个名为squashmigrations的新命令或多或少解决了此处描述的问题。

4
Django 1.8:为现有架构创建初始迁移
我开始了一个使用迁移系统的django 1.8项目。 事情变得一团糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功。 我有三个应用程序(3个models.py文件),并且模型完全反映了表格! 到目前为止,我发现的最佳方法是: 删除所有migrations文件夹。做完了! 从django_migrations表中删除所有内容。做完了! python manage.py makemigrations --empty <app>为每个应用程序运行。做完了! 运行python manage.py migrate --fake。做完了!(尽管只有在每个makemigrations命令之后都运行它,它才有效。 现在,我添加一个新字段,运行makemigrations命令,并且收到以下错误: django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'") 我在这件事上花了HOURS。如何初始化迁移,以便每次都能继续工作而不会中断迁移? 为什么这么复杂?为什么没有一个简单的单线:initiate_migrations_from_schema? 编辑: 现在事情变得更糟了。我删节了django_migrations表并删除了所有migrations文件夹。 现在,我尝试运行python manage.py migrate --fake-initial(我在DEV文档中找到的东西),只是这样它设置了Django的所有“内部”应用程序(身份验证,会话等),并且我得到了: (1054, "Unknown column 'name' in 'django_content_type'")。 现在,这个“列”不是一个真实的列。这是@propertyDjangocontenttypes应用程序中定义的。这里发生了什么?为什么将name属性标识为真实列?

3
django 1.7迁移获取错误“表已存在”
我正在尝试应用迁移,但出现错误: django.db.utils.OperationalError:(1050,“表'customers_customer'已经存在”) 我通过发出以下命令来获取此信息: python manage.py migrate 我的客户表已经存在,那么该怎么做才能让迁移知道这一点,而不是出错,然后对模型进行修改? 我在本地环境的本地数据库上运行了此文件,没有任何问题。当我将数据库指向生产环境并在migrate上面运行时,出现此错误。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.