5

Django Docs使用这个例子来演示多表继承:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

如果我最初像这样构建 Restaurant 类:

class Restaurant(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)

然后在已经创建了一堆 Restaurant 对象之后,我意识到使用 MTI 会更好,有没有一种好方法可以在事后创建父 Place 类并迁移数据?

4

2 回答 2

4

简单的方法:在子模型中创建假IntegerField调用<parent_model>_ptr,填充它,然后将其删除并同时添加父模型。

这是一篇完整的文章:http ://www.johnborwick.com/blog/2013/08/using-south-to-change-a-django-models-parent-class/ 。这是关于南方的,但这个想法也适用于现代 Django。

于 2017-07-25T15:12:25.343 回答
3
  1. 添加新模型,但也保留旧模型。进行迁移

  2. 编写自定义迁移以将数据从Restaurant模型复制到NewRestaurant模型。

  3. 如有必要,将其他模型中的任何外键字段从Restaurant更改为NewRestaurant进行迁移

  4. 如有必要,请更改应用程序中Restaurant用于使用该类的NewRestaurant类。

  5. 删除旧的餐厅模型并进行迁移

  6. 将新的餐厅模型重命名为,Restaurant以便一切都与新结构一起工作。进行迁移

于 2016-05-04T14:23:32.523 回答