【发布时间】:2013-12-30 03:09:44
【问题描述】:
我正在为此挠头。我的数据库中有一个枚举数据。我的模型是这样的:
class SomeModel(models.Model):
TWOCHOICE = (
('YES', 'YES'),
('NO', 'NO'),
('DK', 'Don't Know'),
)
myfield = models.IntegerField(max_length=1, choices=TWOCHOICE)
现在当我想查询这个时,我不能使用:
SomeModel.objects.filter(myfield__in = ['YES', 'NO'])
这看起来最直接。我必须使用整数值。所以我最终使用了:
SomeModel.objects.filter(myfield__in = [[t[0] for t in SomeModel.TWOCHOICE].index(i) for i in ['YES', 'NO']])
但这还不够。这些字段似乎是从 1 开始索引的!!!!所以我需要类似的东西:
SomeModel.objects.filter(myfield__in = [[t[0] for t in SomeModel.TWOCHOICE].index(i)+1 for i in ['YES', 'NO']])
我只是觉得这种方式太复杂了。有没有更好的方法来查询 Django 中的枚举类型?
【问题讨论】:
-
我刚刚预感到 0 是为数据库中的 NULL 值保留的。但这至少记录在某处吗?
-
这甚至不是一个有效的字段定义。选项的键需要与字段的类型相同,在本例中为整数。而且Django会使用key的绝对值,而不是基于一些枚举计算出来的值。
-
感谢 Daniel 的启发。这解决了我所有的问题......
标签: python django django-models enumerated-types