Модель базы данных Django "unique_together" не работает? - PullRequest
2 голосов
/ 23 сентября 2011

Я хочу, чтобы моя комбинация ip и stream_id была уникальной, поэтому я написал эту модель:

# Votes
class Vote(models.Model):
    # The stream that got voted
    stream = models.ForeignKey(Stream)

    # The IP adress of the voter
    ip = models.CharField(max_length = 15)

    vote = models.BooleanField()

    unique_together = (("stream", "ip"),)

Но по какой-то причине он создает эту таблицу, пропуская ip

mysql> SHOW CREATE TABLE website_vote;
+--------------+---------------------------------------------+
| Table        | Create Table                                |
+--------------+---------------------------------------------+
| website_vote | CREATE TABLE `website_vote` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stream_id` int(11) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `vote` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `website_vote_7371fd6` (`stream_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+--------------+---------------------------------------------+
1 row in set (0.00 sec)

Почему в ключ не включено ip? Для справки я знаю, что строка unique_together может быть написана без вложенности кортежей, но это не имеет отношения к вопросу

1 Ответ

6 голосов
/ 23 сентября 2011

unique_together должен быть в классе Meta класса. См. документы .

class Vote(models.Model):
    # The stream that got voted
    stream = models.ForeignKey(Stream)

    # The IP adress of the voter
    ip = models.CharField(max_length = 15)

    vote = models.BooleanField()

    class Meta:
        unique_together = (("stream", "ip"),)

Также имеется встроенное поле модели IPAddressField. Смотри документы здесь .

...