如何在Django中的复合唯一键中使用自动增量?

时间:2016-10-09 23:58:09

标签: python mysql django database sqlite

我有一个这样的模型类:

class TestModel(models.Model):
    class Meta:
        unique_together = ('prefix', 'number')

    prefix = models.CharField(max_length=30)
    number = models.IntegerField()

前缀和数字一起构成了我的模型的自然键,但我并不特别在意这个数字是什么。因此,自动增量(不是每个前缀)就可以了。我不想指定号码,但我希望能够(例如因为现有的前缀+号码对需要放入此系统)。

对于eaxmple,大多数时候我只想使用自动增量:

'the_prefix', 1
'the_prefix', 2

但是,我可能希望在少数情况下使用特定(前缀,数字)组合,例如来自遗留系统的(前缀,数字)对:

'manually', 2  # number is not unique alone...
'manually', 4  # ... or sequential

据我所知,

  • 仅支持单列PK,因此我不能直接使用prefix + number作为复合PK;
  • 只有AutoField是自动递增的,每个型号只能有一个AutoField(它必须是PK),所以我不能同时拥有id和amp;数字自动递增;和
  • 而不是将前缀+ id唯一地放在一起是没有意义的,因为id本身就是唯一的。

有没有办法实现这一点(或者我的陈述之一是错误的)?如果存在与数据库无关的解决方案,那当然是首选,但除此之外,SQLite(开发)和MySQL(生产)对我个人来说最重要。

也欢迎变通办法 - 我正在尝试将PK用作数字的“默认”,但

  • 将数字保持为空以指定默认值会使唯一约束失效,并
  • 要复制id,首先需要保存没有数字的对象。我很难以对用户来说似乎可靠和透明的方式实现这一点

0 个答案:

没有答案