相关疑难解决方法(0)

用于重命名模型和关系字段的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()
Run Code Online (Sandbox Code Playgroud)

我想重命名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 = models.ForeignKey(Bar)  # <-- changed relation, but not field name
    is_awesome = models.BooleanField()


class YetAnotherModel(models.Model):
    foo = models.ForeignKey(Bar)  # <-- changed relation, …
Run Code Online (Sandbox Code Playgroud)

python django django-migrations

133
推荐指数
8
解决办法
6万
查看次数

如何将模型从一个django应用程序迁移到一个新的应用程序?

我有一个django应用程序,里面有四个型号.我现在意识到其中一个模型应该在一个单独的应用程序中.我确实安装了南部进行迁移,但我不认为这是它可以自动处理的东西.如何将其中一个模型从旧应用程序迁移到新应用程序?

此外,请记住,我将需要这是一个可重复的过程,以便我可以迁移生产系统等.

migration django django-south

125
推荐指数
3
解决办法
3万
查看次数

使用所需的ForeignKey引用在Django(1.8)应用程序之间移动模型

这是这个问题的扩展:如何在两个Django应用程序之间移动模型(Django 1.7)

我需要将一堆模型从中移动old_appnew_app.最好的答案似乎是Ozan的,但是需要外键引用,事情有点棘手.@halfnibble在对Ozan的答案的评论中提出了一个解决方案,但我仍然遇到了精确的步骤顺序问题(例如,何时将模型复制到new_app,何时删除模型old_app,哪些迁移将在old_app.migrationsvs中进行.new_app.migrations等)

任何帮助深表感谢!

python database django-models schema-migration

28
推荐指数
1
解决办法
6634
查看次数

将Django模型从一个应用程序移动到另一个应用程

我犯了一个愚蠢的错误,就是在同一个Django应用程序中创建太多模型,现在我想把它分成3个不同的模型.问题是:在两个客户的站点中已经有生产数据,所以我需要仔细规划任何模式/数据迁移(我正在使用django-south).我不确定如何继续,任何建议将不胜感激.

(我在Ubuntu服务器12.4 LTS上使用PostgreSQL,如果有任何相关性)

我考虑过使用db.rename_table,但是无法弄清楚如何正确地将外键更新为那些模型(从旧到新) - 在数据库级别无关紧要(因为表重命名已经覆盖了),但在ORM级别则不然.

更新:在考虑之后,在对programmmers.SE 提出这个问题后,我决定保持简单,不要担心产品主要版本之间的迁移.短期内,我将使用db.rename_table匹配新名称,同时也使用db_table丹尼尔罗斯曼建议,一直保持模型在旧的应用程序.当升级到主要版本时,我开始使用新应用程序并完全放弃所有迁移(因此,新版本的新安装将"按原样"创建数据库,而不是完成所有历史迁移).

database django django-south schema-migration

8
推荐指数
1
解决办法
3592
查看次数

Django 1.7 makemigrations将表重命名为None

我不得不将一些模型从一个应用程序移动到另一个应用程序,我按照这个答案的说明/sf/answers/1853073771/.
基本上我使用了CreateModel生成的迁移python manage.py makemigrations,将它们包装在内部state_operations,并'db_table'使用旧表的名称添加了meta选项.
一切正常,其上的模型new_app正确使用旧表.
但是如果我运行python manage.py makemigrations new_app它会AlterModelTable为每个表创建一个迁移,将它们重命名为None,如下所示:

migrations.AlterModelTable(
    name='cidade',
    table=None,
),
Run Code Online (Sandbox Code Playgroud)

这是一个错误,还是预期的行为?

python django-1.7 django-migrations

6
推荐指数
1
解决办法
913
查看次数

如何通过引用外键将 Django 模型移动到其他应用程序?

这是这个问题的扩展:如何在两个 Django 应用程序之间移动模型 (Django 1.7)

我想使用 Django 迁移将模型 M 从应用程序 A 移动到应用程序 B,而不丢失数据。该问题的最佳投票答案(不是已接受的答案,而是ozan的答案)建议使用 migrations.SeparateDatabaseAndState 并分两步进行:

  1. 迁移以删除模型并重命名(而不是删除)数据库表。
  2. 迁移以创建新模型并使用现有表。

这对我来说看起来是一个非常聪明的方法,但是在我的例子中,有另一个模型 N 具有 M 的外键。现在,当我在第二步中调用 makemigrations 来制作迁移文件时,我收到一个错误,因为在那个阶段AM 模型已不复存在:

ValueError: Lookup failed for model referenced by field C.N.m: A.M  
Run Code Online (Sandbox Code Playgroud)

有办法处理这个问题吗?

python django django-migrations

4
推荐指数
1
解决办法
1829
查看次数

对没有迁移的应用程序的依赖: Django 中的 %s" % key[0])

我需要创建自定义用户。我正在使用带有 AbstractUser 的用户模型:

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.html import escape, mark_safe


class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

设置.py:

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',

    'crispy_forms',

    'backend.classroom',
]
Run Code Online (Sandbox Code Playgroud)

我相信问题出在以下几行:

AUTH_USER_MODEL = 'classroom.User'
Run Code Online (Sandbox Code Playgroud)

错误:

File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 82, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
    self.build_graph()
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 226, in build_graph
    self.add_external_dependencies(key, migration)
  File "/home/davi/.local/share/virtualenvs/django-vue-template-Wl6a6m2J/lib/python3.6/site-packages/django/db/migrations/loader.py", line 191, …
Run Code Online (Sandbox Code Playgroud)

python django django-models

4
推荐指数
1
解决办法
9328
查看次数