【问题标题】:Django - Best way to merge two identical appsDjango - 合并两个相同应用程序的最佳方法
【发布时间】:2012-07-17 18:42:59
【问题描述】:

我最近参加了一个项目,其中我们有两个几乎相同的应用程序。我们正在使用 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 轻松合并两者?我不太确定最好的方法是什么。我唯一的问题是有很多外键引用。有没有一种好方法可以将一个应用程序表的主键更改为高于另一个应用程序(基本上从第一个表结束的地方开始重新分配第二个表中的主键)并让它们向下流动,然后最终合并两张桌子?任何形式的反馈将不胜感激。

【问题讨论】:

  • 每个应用如何知道哪些记录属于它?

标签: django postgresql database-design django-models


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果 Alexander 向您建议的不是您的链接,您可以使用django multi-db 支持来:

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

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 2017-08-28
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      相关资源
      最近更新 更多