Django:创建一个非主键唯一的列

时间:2013-08-20 12:35:32

标签: python django unique-constraint

我有一个带有相应助记符codes的数字names列表,我希望它们有一个Django模型,所以names是主键,但是还有一个约束条件code列中的值是唯一的。

我尝试的是以下内容:

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时没有错误,但它并没有真正强制执行我想要的约束:

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)

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

1 个答案:

答案 0 :(得分:2)

在代码字段中添加唯一选项。

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