相对于可搜索性和速度,在Django中正确使用基于选择的字段的问题。如果我这样设计我的模型:
STATUS_CHOICES = ((1, 'Published'),
(2, 'Unpublished'),
(3, 'Retired'),)
status = IntegerField('Status', choices=STATUS_CHOICES)
在我的数据库中,我没有保存实际状态 - 只有一个相对于Python / Django级别值的键。如果正确理解,这意味着使用像Whoosh这样的全文搜索会使这个字段变得毫无意义 - 它只有键而不是值。这是真的?具有以下内容的CharField会更好:
STATUS_CHOICES = (('Published', 'Published'),
('Unpublished', 'Unpublished'),
('Retired', 'Retired'),)
或者作为ForeignKey这样做会更好吗,我一直听到它比较慢(因为它在数据库级别执行连接)?
答案 0 :(得分:0)
不要使用ForeignKey,除非这些选择需要定期更改或在部署代码之后。
您的第二个选择是正确的方法。在数据库中使用神秘的魔术数字不会让事情变得特别快,如果你需要改变一些事情,它会让你的生活更加艰难。
选择数据结构专门设计为允许您向用户显示比您想要存储在数据库中的更详细的选项集。您可以将“已发布”存储在数据库中,但会向用户显示“已发布工作”或其他内容。