我可以在没有自动 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 中触发密码重置电子邮件?

如何在没有 ID 的情况下在 Prisma 中插入新记录?

在没有onclick的情况下在edittext中设置文本

我们可以在没有 Google 自动缩放器的情况下在 Google 云计算上扩展应用程序吗?

如何在没有触发器和手动插入的情况下在 mysql 中生成/自动增量 guid?