У меня есть устаревшая база данных со следующими таблицами:
человек
person_id (PK) | first_name | last_name
1 | John | Doe
2 | David | Bentley
телефонные номера
person_id (FK,PK) | phone_number (PK) | area_code (PK)
1 | 758-4551 | 909
1 | 763-3445 | 909
2 | 634-0011 | 637
У каждого человека может быть ноль или более телефонных номеров, что является многозначным атрибутом сущности человека.
Я попытался использовать команду Django inspectdb, которая сгенерировала следующие models.py:
class Person(models.Model):
person_id = models.BigIntegerField(primary_key=True)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'person'
class PhoneNumbers(models.Model):
person = models.ForeignKey(Person, models.DO_NOTHING)
phone_number = models.CharField(max_length=15)
area_code = models.CharField(max_length=15)
class Meta:
managed = False
db_table = 'phonenumbers'
unique_together = (('person', 'phone_number', 'area_code'),)
Однако, когда я попытался сохранить новый экземпляр PhoneNumbers, Django вернул следующее сообщение об ошибке:
django.db.utils.ProgrammingError: column phonenumbers.id does not exist
Очевидно, Джанго ожидает, что в таблице телефонных номеров будет суррогатный ключ. Поскольку таблица телефонных номеров не является сущностью, у нее нет суррогатного ключа в моей устаревшей базе данных. Обратите внимание, что первичный ключ таблицы phonenumbers представляет собой композицию всех ее столбцов.
Как я могу сопоставить эти таблицы с моделями Django, чтобы они работали с моей старой базой данных?