Django在主键和唯一约束上建立unique_together模型

vis*_*m c 4 python django django-models django-rest-framework

我有一个模型如下.

class mc(models.Model):
    ap=models.CharField(max_length=50,primary_key=True)
    de=models.CharField(max_length=50)
    STATUS=models.CharField(max_length=12,default='Y')
    class Meta:
        unique_together=(("ap","de"),)
        db_table='mc'
Run Code Online (Sandbox Code Playgroud)

我给表mc写了ap ='1',de ='2'.

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 2  | Y      |
+----+----+--------+
Run Code Online (Sandbox Code Playgroud)

然后我试着写ap ='1'和de ='3',但它只是覆盖了前一个.现在该表包含

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 3  | Y      |
+----+----+--------+
Run Code Online (Sandbox Code Playgroud)

然后我试着写ap ='2',de ='3'及其工作.由于我已经给出了unique_together,因此ap和de的组合不起作用.

但是如果我没有在ap或de上使用'primary_key'或'unique'约束,unique_together会工作.

你能帮我吗?如何在主键上使用unique_together?

实际问题是,我有另一个类mc1,它使用外键到字段ap.

class mc1(models.Model):                                                                                            

    test=models.ForeignKey(mc,on_delete=models.CASCADE,to_field='ap')
Run Code Online (Sandbox Code Playgroud)

所以mc.ap应该是唯一的,以定义一个外键.

Ala*_*air 6

Django不支持多列主键.这是几年来的特色要求.每个模型必须有一个主键.

在您的情况下,如果ap是主键,则每个值ap必须是唯一的.无法同时存储(ap=1, de=2)(ap=1, de=3).

也许你可以添加另一个字段作为主键.然后,你就可以拥有unique_together('ap', 'de').