Django 数据库模型“unique_together”不起作用?

Posted

技术标签:

【中文标题】Django 数据库模型“unique_together”不起作用?【英文标题】:Django database model "unique_together" not working? 【发布时间】:2011-11-23 22:35:16 【问题描述】:

我希望我的ipstream_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】:

unique_together 需要在模型 Meta 类中。见docs。

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 模型字段。请参阅文档here。

【讨论】:

以上是关于Django 数据库模型“unique_together”不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Django启航Django模型

Django启航Django模型

django模型

Django模型

第59天: Web 开发 Django 模型

第59天: Web 开发 Django 模型