python - 主键和唯一约束上的 Django 模型 unique_together

标签 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'

我已将 ap='1', de='2' 写入表 mc。

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 2  | Y      |
+----+----+--------+

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

+----+----+--------+
| ap | de | STATUS |
+----+----+--------+
| 1  | 3  | Y      |
+----+----+--------+

然后我尝试编写 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')

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

最佳答案

Django 不支持多列主键。一直是feature request几年来。各型号must have one primary key .

在您的情况下,如果 ap 是主键,则 ap 中的每个值都必须是唯一的。不可能同时存储 (ap=1, de=2)(ap=1, de=3)

也许您可以添加另一个字段作为主键。然后你将能够为 ('ap', 'de') 拥有 unique_together

关于python - 主键和唯一约束上的 Django 模型 unique_together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44921492/

相关文章:

javascript - 即使 REST 服务器设置 header ,访问控制允许来源错误

python - Django:默认日期时间值导致嘈杂的测试

django - 如何使用Django模型进行不区分大小写的查询

django - 如何从过滤后的有序查询集中获取上一个和下一个对象?

django - 为非管理员前端用户创建类似 django 管理员的操作 - 如何

python - 在 Scrapy 项目中使用 Django 的模型(在管道中)

python - 使用 numpy.argwhere 获取 np.array 中的匹配值

python - 删除 numpy 中高度相关的列(没有 pandas)

python - 给定日期时间的 DataFrame,绘制每年的用户访问情况

python - 使用 ModelForm 的 Django 联系表单