MultiSelectField в сравнении с отдельной моделью

Я создаю каталог больниц и клиник и в качестве поля специальности хотел бы хранить специальность или тип клиники или больницы (например, дерматолог и т.д.). Однако, есть некоторые места, особенно крупные, с большим количеством различных специальностей в одном месте, и поскольку метод choices= в CharField не позволяет выбрать более одного варианта, мне пришлось придумать альтернативу.

Сначала я не думал, что нужно создавать отдельную таблицу и добавлять отношение, поэтому я попробовал пакет django-multiselectfield и он прекрасно работает, но я подумал, не лучше ли создать другую таблицу и дать ей отношение к модели Hospitals. Эта таблица 'type' или 'speciality', созданная однажды, скорее всего, никогда не изменит своего содержимого. Будет ли лучше создать другую таблицу с точки зрения производительности?

Также я пытаюсь хранить choices модели в другом choices.py файле с TextChoices классами моделей, так как я буду использовать одни и те же варианты выбора в различных полях разных моделей в разных приложениях. Я знаю, что обычно лучше хранить варианты внутри одного класса, но имеет ли это смысл в моем случае?

Производительность, вероятно, не является здесь главной проблемой; я думаю, что разница между двумя подходами будет незначительной. Вопрос о том, будет ли одна или несколько моделей использовать один и тот же набор вариантов выбора, не склоняется в ту или иную сторону; это можно сделать либо с помощью фиксированного списка, либо с помощью отношения "многие ко многим".

Хотя вы говорите, что выбор не изменится (аргумент в пользу жестко заданного списка выбора), медицинские специальности - это вид данных, которые меняются в долгосрочной перспективе. В отличие от, скажем, месяцев года или дней недели, вероятность изменения которых гораздо ниже.

<<<Однако, если у вас уже есть поле с множественным выбором, я бы склонялся к тому, чтобы оставить его в покое, пока не появится убедительная причина изменить его.

Что касается второй части, я не вижу проблем с хранением списка вариантов в другом .py файле. Я сделал это исключительно для того, чтобы мой models.py выглядел несколько красиво - я не хочу прокручивать 150 вариантов, чтобы дважды проверить метод модели.

Первая часть - это дело вкуса. Я бы лично пошел по пути Relation + Many-To-Many.
Я всегда планирую крайние случаи, так что "скорее всего не изменится" = "значит, есть вероятность"
. Также мне нравится, что маршрут Relation + Many-To-Many не имеет зависимостей, это основная функция Django... Это довольно надежно и перспективно
. Дополнительным преимуществом является то, что создание еще одной таблицы также означает, что нетехнический человек может потенциально добавить новые опции, и теоретически вы не тратите свое время на постоянные изменения.

Вернуться на верх