Django 数据库模型“unique_together”不起作用?
Posted
技术标签:
【中文标题】Django 数据库模型“unique_together”不起作用?【英文标题】:Django database model "unique_together" not working? 【发布时间】:2011-11-23 22:35:16 【问题描述】:我希望我的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】: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”不起作用?的主要内容,如果未能解决你的问题,请参考以下文章