Создание поискового приложения Django с полем выбора - PullRequest
2 голосов
/ 28 октября 2010

Вопрос в правильном использовании поля выбора в 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, который, как я всегда слышал, был намного медленнее (поскольку он выполняет соединение на уровне базы данных)

1 Ответ

0 голосов
/ 28 октября 2010

Не используйте ForeignKey, если эти варианты не нужно регулярно менять или после развертывания кода.

Ваш второй вариант - правильный способ сделать это. Использование загадочных магических чисел в вашей базе данных не сделает вещи особенно быстрыми, а потом сделает вашу жизнь труднее, если вам нужно что-то изменить.

Структура данных choices специально разработана для того, чтобы вы могли отображать пользователям более подробный набор опций, чем вы хотите сохранить в своей БД. Вы можете хранить «опубликованные» в БД, но отображать для пользователя «Работы опубликованы» или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...