使用基于选项的字段构建可搜索的Django应用程序

使用基于选项的字段构建可搜索的Django应用程序,django,Django,在Django中正确使用基于选择的字段与可搜索性和速度有关的问题。如果我这样设计我的模型: STATUS_CHOICES = ((1, 'Published'), (2, 'Unpublished'), (3, 'Retired'),) status = IntegerField('Status', choices=STATUS_CHOICES) 在我的数据库中,我没有实际状态“saved”-只有一个与Python/Dj

在Django中正确使用基于选择的字段与可搜索性和速度有关的问题。如果我这样设计我的模型:

STATUS_CHOICES = ((1, 'Published'),
                  (2, 'Unpublished'),
                  (3, 'Retired'),)

status = IntegerField('Status', choices=STATUS_CHOICES)
在我的数据库中,我没有实际状态“saved”-只有一个与Python/Django级别的值相关的键。如果in-understand正确,这意味着带有Whoosh之类内容的全文搜索将使该字段变得毫无意义——它将只包含键,而不包含值。这是真的吗?具有以下内容的CharField是否更好:

STATUS_CHOICES = (('Published', 'Published'),
                  ('Unpublished', 'Unpublished'),
                  ('Retired', 'Retired'),)

或者,作为一个ForeignKey来执行这项操作会更好吗?我一直听说这个过程要慢得多(因为它是在数据库级别执行连接的)?

除非这些选项需要定期更改或在部署代码之后更改,否则不要使用ForeignKey

第二种选择是正确的方法。在数据库中使用神秘的魔法数字不会让事情变得特别快,如果你需要改变事情,它会让你以后的生活更加艰难


choices数据结构专门设计用于向用户显示一组比您希望存储在数据库中的选项更详细的选项。您可以在数据库中存储“published”,但向用户显示“Work published”或其他内容。

除非这些选项需要定期更改或在部署代码后更改,否则不要使用ForeignKey

第二种选择是正确的方法。在数据库中使用神秘的魔法数字不会让事情变得特别快,如果你需要改变事情,它会让你以后的生活更加艰难

choices数据结构专门设计用于向用户显示一组比您希望存储在数据库中的选项更详细的选项。您可以在数据库中存储“published”,但向用户显示“workpublished”或其他内容