多对多中间表的Django遗留数据库迁移

多对多中间表的Django遗留数据库迁移,django,sequelize.js,database-migration,Django,Sequelize.js,Database Migration,遗留数据库迁移到Django(v1.11)(来自Sequelize) 数据库中的中间表没有id(主键属性),因为Sequelize不需要它,但在Django中它似乎是必需的 当前Django设置: class Address(models.Model): keyword = models.CharField(max_length=255) city = models.CharField(max_length=255, blank=True, null=True) stat

遗留数据库迁移到Django(v1.11)(来自Sequelize)

数据库中的中间表没有id(主键属性),因为Sequelize不需要它,但在Django中它似乎是必需的

当前Django设置:

class Address(models.Model):
    keyword = models.CharField(max_length=255)
    city = models.CharField(max_length=255, blank=True, null=True)
    state = models.CharField(max_length=255, blank=True, null=True)
    createdAt = models.DateTimeField(db_column='createdAt', auto_now_add=True)
    updatedAt = models.DateTimeField(db_column='updatedAt', auto_now=True)

    class Meta:
        db_table = 'Addresses'

class CustomerExecutive(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)
    email = models.CharField(max_length=255)
    addresses = models.ManyToManyField('Address', through='AddressCustomerExecutiveMapping')
createdAt = models.DateTimeField(db_column='createdAt', auto_now_add=True)
updatedAt = models.DateTimeField(db_column='updatedAt', auto_now=True)

    class Meta:
        db_table = 'CustomerExecutives'

class AddressCustomerExecutiveMapping(models.Model):
    address = models.ForeignKey(Address,  db_column='addressId', primary_key=True)
    customer_executive = models.ForeignKey(CustomerExecutive, db_column='customerExecutiveId', primary_key=True)
    createdAt = models.DateTimeField(db_column='createdAt', auto_now_add=True)
    updatedAt = models.DateTimeField(db_column='updatedAt', auto_now=True)

    class Meta:
        db_table = 'AddressCustomerExecutiveMapping'
    unique_together = (('address', 'customer_executive'),)
如果未在
AddressCustomerExecutiveMapping.address
AddressCustomerExecutiveMapping.customer\u ExecutiveMapping.customer\u
上指定
primary\u key
,则会给出所需的主键错误,如果指定,则无法在列中添加重复值(然后不是多对多)


如何解决此问题?

从两个字段中删除主键。如前所述,它会给出一个主键必需的错误。我运行,它对我有效,在删除主键属性后,尝试重新划分数据库,迁移工作正常,但由于表中已存在数据,因此无法在其上创建id属性。在请求默认值(如果给定909)后失败,随后表示主键不能重复,因为您已写下脚本,该脚本将更改该值。在迁移文件中生成一个函数,该函数生成唯一的no,并在默认情况下传递该函数,这些代码将进入侧迁移