我正在使用SQL Server作为默认数据库。我使用inspectdb命令在模型中复制了SQL Server表。现在,SQL Server表没有任何主键列。因此,django模型会自动创建id作为主键,并在发布数据时给我错误。
列“ 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'
答案 0 :(得分:0)
如果您未明确定义主键,则ID成为您的主键。所以你不能那样做。
答案 1 :(得分:0)
答案 2 :(得分:0)
SQL并没有严格要求主键必须唯一,因此可以做到这一点:
class ImptCustomer(models.Model):
customerid = models.IntegerField(
primary_key=True,
unique=False,
default=None,
blank=True,
null=True,
db_column='CustomerId'
)
当然,您必须手动为新记录生成主键值,但是如果您已经存在包含数据的数据库,那么它可能只是它的单一解决方案。