Как создать модель Django без столбца первичного ключа и избегая идентификатора столбца по умолчанию - PullRequest
1 голос
/ 12 марта 2019

Я использую SQL Server в качестве базы данных по умолчанию.Я реплицировал таблицу SQL Server в модели с помощью команды inspectdb.Теперь в таблице SQL Server нет столбца первичного ключа.Итак, модель django автоматически создает id в качестве первичного ключа и выдает ошибку при публикации данных.

столбец "id" не существует

Есть ли обходной путь?удалить идентификатор при этом не определяя первичный ключ ни в одном столбце модели?

from django.db import models

class ImptCustomer(models.Model):
    customerid = models.IntegerField(db_column='CustomerId', blank=True, null=True)  # Field name made lowercase.
    name = models.CharField(db_column='Name', max_length=50, blank=True, null=True)  # Field name made lowercase.
    phonenumber = models.CharField(db_column='PhoneNumber', max_length=20, blank=True, null=True)  # Field name made lowercase.
    emailaddress = models.CharField(db_column='EmailAddress', max_length=100, blank=True, null=True)  # Field name made lowercase.
    streetline = models.CharField(db_column='StreetLine', max_length=50, blank=True, null=True)  # Field name made lowercase.
    city = models.CharField(db_column='City', max_length=50, blank=True, null=True)  # Field name made lowercase.
    statecode = models.CharField(db_column='StateCode', max_length=5, blank=True, null=True)  # Field name made lowercase.
    postalcode = models.CharField(db_column='PostalCode', max_length=20, blank=True, null=True)  # Field name made lowercase.
    customer_key = models.IntegerField(db_column='Customer_Key', blank=True, null=True, editable = False)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'IMPT_Customer'

Ответы [ 3 ]

0 голосов
/ 12 марта 2019

Я думаю, это может работать так:

https://docs.djangoproject.com/en/2.1/topics/db/models/#automatic-primary-key-fields

from django.db import models

class ImptCustomer(models.Model):
    customerid = models.AutoField(primary_key=True, db_column='CustomerId')  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'IMPT_Customer'
0 голосов
/ 12 марта 2019

Это невозможно с ORM Джанго:

Для каждой модели требуется только одно поле, чтобы primary_key = True (либо явно объявленный, либо автоматически добавленный).

(см здесь )

0 голосов
/ 12 марта 2019

Если вы не определите первичный ключ явно, тогда идентификатор станет вашим первичным ключом.Так что вы не можете этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...