Skip to main content
 首页 » 编程设计

python之Django:创建一个不是主键唯一的列

2024年08月28日29over140

我有一个数字 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) 

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

请您参考如下方法:

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

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