【问题标题】:How to convert Foreign Key Field into Many To Many Field without disturbing existing data in the database?如何在不干扰数据库现有数据的情况下将外键字段转换为多对多字段?
【发布时间】:2017-05-14 11:01:31
【问题描述】:

我的代码sn-p如下:

class Table1(models.Model):
    name = models.CharField(max_length=20)

class Table2(models.Model):
    name = models.CharField(max_length=20)
    description = models.TextField()
    table1 = models.ForeignKey(Table1)

考虑这两个表在数据库中都有数据。在不丢失数据库中现有数据的情况下,将Foreign Key Field(in Table2) 转换为Many To Many 字段的可能方法是什么?

*Note: I am using Django 1.6.4(not using Django migrations)*

【问题讨论】:

  • 您需要付出很多努力。你为什么使用这个不受支持的版本。升级到 1.8 或 1.10 并使用迁移。
  • @e4c5 升级版本通常是相当痛苦的。他提到的项目可能不在积极维护中
  • 如果它在线,它应该升级,因为 django 1.6 没有维护,你可能会遇到安全问题。通过迁移更改表比手动更改表要容易得多

标签: mysql django


【解决方案1】:

您需要分几步完成。首先添加 M2M 字段并复制您的数据。接下来更改您的应用程序逻辑以使用新字段。最后,您可以删除旧的 ForeignKey-field。

【讨论】:

    【解决方案2】:
    class Table2(models.Model):
        name = models.CharField(max_length=20)
        description = models.TextField()
        table1 = models.ForeignKey(Table1)
        table1_new = models.ManyToManyField(Table1, related_name='_')
    
    # python manage.py makemigrations && python manage.py migrate && python manage.py shell
    # get things done by a for loop
    
    
    class Table2(models.Model):
        name = models.CharField(max_length=20)
        description = models.TextField()
        table1_new = models.ManyToManyField(Table1, related_name='_')
    
    # python manage.py makemigrations && python manage.py migrate
    
    
    class Table2(models.Model):
        name = models.CharField(max_length=20)
        description = models.TextField()
        table1 = models.ManyToManyField(Table1)
    
    # python manage.py makemigrations && python manage.py migrate
    

    【讨论】:

    • 您是说不要升级到 1.8,但您提供的是使用迁移的解决方案!!
    • 我认为南会解决他没有迁移的问题。不太确定,因为我没有使用过旧版本。
    猜你喜欢
    • 2011-03-08
    • 2015-07-23
    • 2013-03-16
    • 2011-06-27
    • 2015-08-05
    • 2011-07-14
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多