一尘不染

Django中的复合主键

django

我有一个具有复合主键的旧式数据库表。我认为我无法更改结构以包含代理键,因为编写了一些使用该表的代码。在django中,我无法使用该表,因为它没有主键(非复合键)。

Django模型是否支持复合主键?如果不是,是否有任何解决方法而不更改表的结构?

PS我正在使用PostgreSQL。


阅读 730

收藏
2020-03-30

共1个答案

一尘不染

试试下面类似的代码:

class MyTable(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1 = models.IntegerField(primary_key=True)
    key2 = models.IntegerField()

或者,如果你只想要唯一的混合字段:

class MyTable(models.Model):
    class Meta:
        unique_together = (('key1', 'key2'),)

    key1 = models.IntegerField()
    key2 = models.IntegerField()

编辑:我想指出,如果有3列,则此方法存在问题。更新查询不起作用,因为它尝试更新(唯一设置在“ SET”之后的pk字段)唯一的字段,并且显然失败。

2020-03-30