Миграция устаревшей БД на Django (v1.11) (из Sequelize).
Промежуточная таблица в базе данных не имеет идентификатора (атрибута первичного ключа), поскольку 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'),)
Если primary_key
не указан в AddressCustomerExecutiveMapping.address
или AddressCustomerExecutiveMapping.customer_executive
, он выдает ошибку «Требуемый первичный ключ», и если он указан, я не могу добавить повторяющиеся значения в столбец (тогда не много ко многим).
Как я могу это решить?
Как уже говорилось, он дает ошибку, необходимую для первичного ключа.
Я бегу, у меня это работает, просто попробуйте перенастроить БД
После удаления атрибутов primary_key миграции работают, но поскольку в таблице уже есть данные, создать для них атрибут id невозможно. Ошибка после запроса значения по умолчанию (если задано 9090909), позже происходит сбой, говоря, что первичный ключ не может быть дублирован
для этого вы должны написать сценарий, который изменит значение. создать функцию в файле миграции, которая генерирует уникальный номер и передает эту функцию по умолчанию, этот код пойдет в побочные миграции
удалить первичный ключ из обоих полей