我可以在没有自动 ID 的情况下在 Django 中创建模型吗?
Posted
技术标签:
【中文标题】我可以在没有自动 ID 的情况下在 Django 中创建模型吗?【英文标题】:Can I create model in Django without automatic ID? 【发布时间】:2015-04-15 11:14:06 【问题描述】:我需要一个没有主键的表(在 Django 中它是自动创建的)。所以我的问题是:我可以创建一个没有 ID/主键的模型吗?
我正在使用 Django 1.7。
【问题讨论】:
【参考方案1】:您可以创建一个没有自动递增键的模型,但您不能创建一个没有主键的模型。
来自Django Documentation:
如果 Django 看到你明确设置了
Field.primary_key
,它不会添加自动 id 列。每个模型只需要一个字段来具有
primary_key=True
(显式声明或自动添加)。
【讨论】:
【参考方案2】:我找到了解决办法。
由于 django 需要主键(它是复合或单字段 ID),所以我尝试在其复合键组合中的每个字段中设置 primary_key=True,并将这些字段添加到 Meta 中,并将这些字段添加到 unique_together 中
class ReportPvUv(models.Model):
report_id = models.ForeignKey(Reports, primary_key=True)
rdate = models.DateField(primary_key=True)
fdate = models.DateTimeField(primary_key=True)
ga_pv = models.BigIntegerField()
ga_uv = models.BigIntegerField()
ur_pv = models.BigIntegerField()
ur_uv = models.BigIntegerField()
da_pv = models.BigIntegerField()
da_uv = models.BigIntegerField()
class Meta:
db_table = 'report_pv_uv'
unique_together = ('report_id', 'rdate', 'fdate')
当我运行 makemigrations 时,它的迁移脚本中没有 ID 字段:D
谢谢大家
【讨论】:
哦不!!。您不能设置多个主键。您需要将其设置为unique=True
,并且只有一个主键
Django 不支持多列主键。这种方法有很多问题。见code.djangoproject.com/wiki/MultipleColumnPrimaryKeys
实际上这是我需要的,因为我必须处理设计错误的数据库
面对遗留数据库中的复合键我无法想象为什么 Django ORM 不支持这一点,因为票已在 12 年前提出。这将是一个不错的功能。【参考方案3】:
不,你不能。摘自documentation:
每个模型只需要一个字段来设置 primary_key=True(显式声明或自动添加)。
【讨论】:
以上是关于我可以在没有自动 ID 的情况下在 Django 中创建模型吗?的主要内容,如果未能解决你的问题,请参考以下文章
你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?
在没有浏览器的情况下在 django 中触发密码重置电子邮件?