【发布时间】:2019-03-12 17:14:31
【问题描述】:
我使用 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'
【问题讨论】:
-
不能用
customerid作为主键吗? SQL表怎么可能没有pk? -
@dirkgroten 这是一个临时表,所以通常它没有任何主键。
-
除非你有一个主键,否则 Django 模型将无法工作,这太单一了。不支持复合。一种解决方法可能是使用 Django.db 中的游标
标签: python sql-server django