我想要一个只能有一条记录的表。我目前的解决办法是:在Django/MySQL中创建单例表的最佳方法
class HitchingPost(models.Model):
SINGLETON_CHOICES = (('S', 'Singleton'),)
singleton = models.CharField(max_length=1, choices=SINGLETON_CHOICES, unique=True, null=False, default='S');
value = models.IntegerField()
def __unicode__(self):
return u"HitchingPost" # only ever one record
这是有点丑,不强制在MySQL的水平约束。
有没有更好的解决方案?
是否有MySQL字段类型只能有一个值(布尔值是我发现的最小,有两种可能性)?基数为0的数字是我最近表达这个概念的地方。
是否有这样的事物的数学名称?
感谢,
克里斯。
P.S.生成的SQL是:
CREATE TABLE `appname_hitchingpost` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`singleton` varchar(1) NOT NULL UNIQUE,
`value` integer NOT NULL
)
;
''这是一个数学名称吗?'' - 一个常数? – 2010-09-23 11:03:16
它在MySQL级别执行强制约束。只需尝试'HitchingPost.objects.create(value = 12)',接着是例如'HitchingPost.objects.create(值= 13)'。如果你没有得到IntegrityError,那么你有更广泛的问题。 – 2010-09-23 21:46:08
@Tomasz - 是的,它在Django层强制执行完整性,但MySQL表没有类似的限制。非Django应用程序可以插入value = 13而没有问题。如果你有兴趣,我会挖掘它创建的SQL。 – fadedbee 2010-09-26 20:11:35