- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这是对这个问题的扩展:How to move a model between two Django apps (Django 1.7)
我需要将一堆模型从old_app
移到new_app
。最好的答案似乎是Ozan's,但是使用必需的外键引用,事情会变得有些棘手。 @halfnibble在对Ozan的回答的注释中提出了一种解决方案,但是我仍然无法确定确切的步骤顺序(例如,何时将模型复制到new_app
,何时从old_app
删除模型,迁移将坐下来在old_app.migrations
与new_app.migrations
等中)
任何帮助深表感谢!
最佳答案
在应用之间迁移模型。
简短的答案是,不要这样做!
但是,这个答案在现实生活中的项目和生产数据库中很少起作用。因此,我创建了一个sample GitHub repo来演示这个相当复杂的过程。
我正在使用MySQL。 (不,这些不是我的真实凭证)。
问题
我使用的示例是带有 cars 应用程序的工厂项目,该应用程序最初具有Car
模型和Tires
模型。
factory
|_ cars
|_ Car
|_ Tires
Car
模型与
Tires
具有ForeignKey关系。 (同样,您可以通过汽车模型指定轮胎)。
Tires
将成为具有自己的 View 等的大型模型,因此我们希望在自己的应用程序中使用它。因此,所需的结构为:
factory
|_ cars
|_ Car
|_ tires
|_ Tires
Car
和
Tires
之间的ForeignKey关系,因为太多依赖于保留数据。
Tires
模型移至其自己的应用程序。认真地将代码粘贴到新的轮胎应用中。确保更新
Car
模型以指向新的
tires.Tires
模型。
./manage.py makemigrations
并将数据库备份到某个地方(以防万一这失败了)。
./manage.py migrate
并查看doom的错误消息,
cars
。您必须进行新的空迁移。实际上,此迁移需要在最近创建的迁移(执行失败的迁移)之前运行。因此,我对重新创建的迁移进行了重新编号,并更改了相关性以首先运行我的自定义迁移,然后运行
cars
应用程序的最后一个自动生成的迁移。
./manage.py makemigrations --empty cars
oldapp_model
重命名为
newapp_model
,而不会弄乱Django的状态。您必须确定Django将根据应用程序名称和模型名称为数据库表命名的方式。
tires
迁移了。
cars
应用程序中的数据库表。另外,您需要确保先前进行的自定义迁移是该迁移的依赖项。参见轮胎
migration file。
cars.Tires
重命名为
tires.Tires
,并更改了Django状态以识别
tires.Tires
表。
AlterField
操作,因为
Car
模型指向不同的模型(即使它具有相同的数据)。但是,我们需要删除有关
DeleteModel
的迁移行,因为
cars.Tires
模型不再存在。它已完全转换为
tires.Tires
。查看
this migration。
cars.Tires
模型。它是仅状态的,因为
cars.Tires
的数据库表已重命名。此
last migration清除剩余的Django状态。
关于python - 使用必需的ForeignKey引用在Django(1.8)应用程序之间移动模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30601107/
我正在尝试使用 limit_choices_to 来限制 Django 管理员对 ForeignKey 的选择,但我不知道如何正确地做到这一点。 如果类别 ID 为 16,此代码将执行我想要的操作,但
我有以下实体: @Entity(indices = {@Index("address")}, foreignKeys = @ForeignKey( entity = Address.
我是 Websphere 应用程序服务器的新手。请让我知道我哪里做错了。我收到 java.lang.NoSuchMethodError: javax.persistence.JoinColumn.fo
我最近将我的 Wicket 6 应用程序从 Spring 3 升级到了 Spring 4。 当我在 Jetty 7 上本地运行应用程序时,它运行良好。 当我将其部署到 Tomcat 7 时,出现以下错
这不是一个重复的问题。正如这个问题的正文中所解释的那样,出于各种原因,我不得不返回到一个旧的 Spring 和 Hibernate 项目。该项目使用这两个框架通过 Apache Tomcat 连接到
我有一个用 Spring MVC 编写并使用 Hibernate 的简单的两表应用程序。一切正常,但如果我尝试对其中一个 Controller 进行单元测试,我会收到消息: Invocation of
我正在使用这些环境开发应用程序: 打开 GlassFish 3.1.2.2 Spring 专家 MySQL hibernate POM.XML 4.0.0 com.andriasof
我正在使用 Spring Boot 在具有许多 Hibernate 依赖项的现有项目上做一个原型(prototype)。我正在尝试定义一个自定义的 LocalEntityManagerFactoryB
如何从Django自带的auth包中导入User,我需要做的: from django.contrib.auth.models import User 虽然要引用相同的 User 模型来创建 Fore
我正在尝试这样的一些: class F(models.Model): class Meta: abstract = True class C1(F): class C2(F):
感谢您检查这一点。 我的愚蠢怀疑: 我在 Django 中定义了以下模型: class School(models.Model): name = models.CharField(max_le
我有两个模型。 parent 和 child 。因为 child 和 parent 有一些不同的领域,所以我不得不将他们分开,而不是有一个单一的模型人。因为 child 应该有父亲和母亲,所以我在不同
当我尝试为以下模型进行迁移时: class Location(models.Model): name = models.CharField(max_length=200) latitu
是否可以保证ForeignKey不被删除? 最好的例子在 UserProfile 上: class UserProfile(Model): user = models.OneToOneFiel
在Django docs ForeignKey 的条目,它说: If you need to create a relationship on a model that has not yet bee
我有一个模型,我想在其中保存一个新实例(行)。我有 ForeignKey 的主键,但我没有对象本身(假设它来自某个地方)。有什么方法可以在没有原始 SQL 且无需获取实例的情况下保存它吗? 这是模型:
因此,在定义模型之前,我需要为该模型创建一个外键。考虑以下模型: class Question(models.Model): """Model for question.""" que
有一个面试测试,下面是表格和结构 Table Person = id, name, dob, dod, mother_id, father_id Primary Key (id) Foreign
前言 大家使用 Django 创建模型的时候一定会经常使用 ForeignKey 来创建两个表格之间多对一的外键关系,例如B中有一个 models.ForeignKey(A) 。而当我们需要反向查
我正在删除项目中的一些无用代码,我有机会删除自项目启动以来我们一直在使用的对第三方应用程序的依赖。我们的一个模型在第三方应用程序中有一个模型的外键,我在尝试对项目的新实例应用迁移时遇到了麻烦。 示例模
我是一名优秀的程序员,十分优秀!