如何在不干扰数据库中的现有数据的情况下将外键字段转换为多对多字段?

时间:2016-12-30 05:43:03

标签: mysql django

我的代码段如下:

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)*

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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