【问题标题】:Django: Make a column which is not primary key uniqueDjango:使一个不是主键唯一的列
【发布时间】:2013-08-22 12:20:40
【问题描述】:

我有一个数字列表 codes 和相应的助记符 names,我想为它们创建一个 Django 模型,因此 names 是主键,但也有一个约束,即 @987654324 中的值@ 列是唯一的。

我尝试的是以下内容:

class Constant(models.Model):
    name = models.CharField(max_length=70)
    name.primary_key = True
    code = models.IntegerField()
    description = models.CharField(max_length=100)

    unique_together = (("code",),)

我意识到unique_together 旨在强制一组列中值的唯一性,但我想我只尝试一个,它似乎工作,即在执行python manage.py syncdb 时没有错误,但它没有t 真正执行我想要的约束:

mysql> describe constant;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| name        | varchar(70)  | NO   | PRI |         |       |
| code        | int(11)      | NO   |     |         |       |
| description | varchar(100) | NO   |     |         |       |
+-------------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> insert into constant values ('x',1,'fooo');
Query OK, 1 row affected (0.00 sec)

mysql> insert into constant values ('y',1,'foooo');
Query OK, 1 row affected (0.00 sec)

如何确保两列中的值是唯一的?

【问题讨论】:

  • 为什么不在字段定义中只使用unique=True(并且primary_key=True 应该在name 的定义中,而不是之后分配)。
  • 是的,成功了!非常感谢。出于某种原因,我无法通过谷歌找到这个相当明显的解决方案。你为什么不把这个作为答案?再次感谢。

标签: python django unique-constraint


【解决方案1】:

将唯一选项添加到您的代码字段。

class Constant(models.Model):
    name = models.CharField(max_length=70, primary_key=True)
    code = models.IntegerField(unique=True)
    description = models.CharField(max_length=100)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2011-01-17
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多