Ошибка django: неверное имя столбца 'id' (SQL SERVER) - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать веб-приложение, используя django и подключаясь к базе данных SQL Server.Таблица, которую я использую для отображения данных в форме django, состоит из 2 столбцов.Оба они являются внешним ключом, и оба они вместе строят первичный ключ таблицы

CREATE TABLE [dbo]. [MyTable] ([ID_Field1] [int] NOT NULL, [ID_Field2][int] NOT NULL, CONSTRAINT [PK_Movies2Genres] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРИРОВАН ([ID_Field1] ASC, [ID_Field2] ASC) С (PAD_INDEX = ВЫКЛ, STATISTICS_NORECOMPUTE = ВЫКЛ, IGNORE_DUP_KEY = ВЫКЛЮЧЕНО, ALLOW_RO_WOW_WOR_WOR_WOR_WOR_WORGE_ROW)) ВКЛЮЧЕНО [ОСНОВНОЕ]

ИЗМЕНИТЬ ТАБЛИЦУ [dbo]. [MyTable] С ПРОВЕРКОЙ ДОБАВИТЬ, ОГРАНИЧЕНО [FK_Field2] ВНЕШНИЙ КЛЮЧ ([ID_Field2]) ССЫЛКИ [dbo]. [Table2] ([ID_Field2])

ALTER TABLE [dbo]. [MyTable] CHECK CONSTRAINT [FK_Field2]

ALTER TABLE [dbo]. [MyTable] С CHECK ADD CONSTRAINT [FK_Field1] ИНОСТРАННЫЙ КЛЮЧ ([ID_Field1]) ССЫЛКИ [dbo]. [Table1] ([ID_Movie])

ALTER TABLE [dbo]. [MyTable] CHECK CONSTRAINT [FK_Field1]

Теперь, django не может создать модель, соответствующую этому видуструктуры таблицы SQL, то есть он не может создать прimary-ключ, состоящий из нескольких полей.Вместо этого он устанавливает первичный ключ в одном из 2 столбцов, а в мета-разделе класса модели он устанавливает

unique_together = (('id_field1', 'id_field2'),)

Полная модель:

Класс MyTable (models.Model):

id_field1 = models.ForeignKey(Table1, on_delete=models.DO_NOTHING, db_column='ID_Field1') 
id_field2 = models.ForeignKey(Table2, on_delete=models.DO_NOTHING, db_column='ID_Field2')

class Meta:
    managed = False
    db_table = 'MyTable'
    unique_together = (('id_field1', 'id_field2'),)

Однако, вот что django inspectdb говорит мне сделать,Я знаю, что django автоматически создает поле с именем id, когда не определен первичный ключ.Это, кажется, имеет место здесь, хотя определен первичный ключ.Есть идеи, как справиться с этой проблемой?

1 Ответ

1 голос
/ 16 апреля 2019

использование: https://github.com/onysos/django-composite-foreignkey

class Customer(models.Model):

    company = models.IntegerField()
    customer_id = models.IntegerField()
    name = models.CharField(max_length=255)
    address = CompositeForeignKey(Address, on_delete=CASCADE, to_fields={
        "tiers_id": "customer_id",
        "company": LocalFieldValue("company"),
        "type_tiers": RawFieldValue("C")
    })

    class Meta(object):
        unique_together = [
            ("company", "customer_id"),
        ]


class Contact(models.Model):
    company_code = models.IntegerField()
    customer_code = models.IntegerField()
    surname = models.CharField(max_length=255)
    # virtual field
    customer = CompositeForeignKey(Customer, on_delete=CASCADE, related_name='contacts', to_fields={
        "customer_id": "customer_code",
        "company": "company_code"
    })
...