У меня есть список числовых 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)
Что я могу сделать, чтобы убедиться, что значения в обоих столбцах уникальны?
unique=True
в определении поля (аprimary_key=True
должно быть в определении поляname
, а не назначено впоследствии). - person Daniel Roseman   schedule 20.08.2013