【发布时间】:2015-02-26 01:45:09
【问题描述】:
我有一个模型,其中定义了 unique_together 3 个字段一起唯一:
class MyModel(models.Model):
clid = models.AutoField(primary_key=True, db_column='CLID')
csid = models.IntegerField(db_column='CSID')
cid = models.IntegerField(db_column='CID')
uuid = models.CharField(max_length=96, db_column='UUID', blank=True)
class Meta(models.Meta):
unique_together = [
["csid", "cid", "uuid"],
]
现在,如果我尝试使用现有 csid+cid+uuid 组合保存 MyModel 实例,我会得到:
IntegrityError: (1062, "Duplicate entry '1-1-1' for key 'CSID'")
这是正确的。但是,有没有办法自定义那个键名? (在这种情况下为CSID)
换句话说,我可以为unique_together 中列出的约束提供一个名称吗?
据我了解,这不在文档中。
【问题讨论】:
-
只是好奇更改索引名称的用例是什么?除了美观之外,我看不出它有什么重要意义,除非您直接与数据库打交道。
-
@user193130 这是一个好点。我有一个相当奇怪的 Django 用例,其中我有一个没有任何外键关系的遗留 mysql 数据库,并且在整个应用程序中我主要通过原始查询来操作数据库(这让我很生气,顺便说一句,不要问)。不过在测试中,我使用 django ORM,
models.py尽可能接近真实的遗留数据库。在这里,我希望将唯一键约束命名为真实数据库中的名称。希望你能理解我目前的所有奇怪之处:) -
啊,是的,这实际上很有意义。处理遗留数据库听起来很麻烦,但我假设您正在使
models.py尽可能接近真实数据库,以便准备将其不仅用于测试,而且用于实际应用程序代码,所以你不要'不必再处理原始查询了。希望你一切顺利 -
猜猜所有更改错误消息的答案对你不起作用,哈哈
-
@danihp 请取消删除它 - 您花了时间并付出了巨大的努力来研究这个主题。不要担心赏金 - 我很确定会有另一个赏金:)
标签: python mysql django django-models unique-constraint