Django - 合并两个相同应用程序的最佳方式

时间:2012-07-18 16:43:12

标签: django postgresql database-design django-models

我最近进入了一个项目,其中我们有两个实际上完全相同的应用程序。我们正在使用Django 1.4和Postgresql 8.4。两种型号都有以下几种:

  class Author(models.Model):
    person = models.ForeignKey(Person)
    book = models.ForeignKey(Book)
    order = models.PositiveIntegerField(blank=True,null=True)
    institute = models.ForeignKey(Institution,blank=True, null=True)
    rank = models.ForeignKey(Rank,blank=True, null=True)

  class Institution(models.Model):
    name = models.CharField(max_length=200)
    parent_institution = models.ForeignKey('self', blank=True, null=True)
    location = models.ForeignKey(Location, blank=False, null=False)
    type = models.ForeignKey(InstitutionType, blank=False, null=False)

  class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    middle_name = models.CharField(max_length=50,blank=True,null=True)
    gender = models.CharField(max_length=1,choices=GENDER_TYPE,blank=True,null=True)

  class InstitutionType(models.Model):
    type = models.CharField(max_length=255)

有没有办法通过SQL或Django轻松合并两者?我不太确定最好的方法是什么。我唯一的问题是有很多外键引用。是否有一种很好的方法可以将一个应用程序表的主键更改为高于另一个应用程序(基本上从第一个表开始的第二个表中重新分配主键)并让它们向下滴,然后最终合并两张桌子?任何形式的反馈都会非常感激。

2 个答案:

答案 0 :(得分:0)

合并中最困难的可能是模型。 如果您使用Django,您也应该使用South。如果你不这样做 - 试试吧。 以第一个申请为基础。从第二个应用程序添加字段并创建模式迁移。 然后使用来自第二个应用程序的数据迁移来移动数据。 合并第二个应用程序中的代码。

答案 1 :(得分:0)

如果亚历山大向你建议的不是你的链接,你可以使用django multi-db支持:

  • 让两个应用在同一个数据库和模型上运行
  • 使用迁移/同步脚本,同时慢慢解耦两个模型,以便只使用一个
  • 写测试:)