У меня есть две разные модели, которые я хотел бы фильтровать аналогичным образом с помощью общего имени поля в разное время, поэтому я написал одну функцию контекста, которая обрабатывает обе модели, беря строку как аргумент для использования в качестве имени модели. Прямо сейчас я использую eval(), но что-то в моей кишке говорит мне, что это серьезная ошибка. Есть ли более питонический способ сделать то, что я описываю?Рекомендации по передаче имен моделей в виде строк
Вот сокращенный вариант того, что мой код выглядит на данный момент:
def reference_context(model, value):
menu = main_menu()
info = company_info()
pages = get_list_or_404(eval(model), category = value)
Во-вторых, есть ли способ передать ключевое слово в подобной манере, так что я мог бы что-то вдоль линий:
def reference_context(model, category, value):
menu = main_menu()
info = company_info()
pages = get_list_or_404(eval(model), eval(category) = value)
И комментарий по любой другой проблеме приветствуется и очень рекомендуется.
Почему вам нужно передать модель в виде строки, а не в качестве эталона? Например. reference_context (MyModel, value) –
Не знаю, насколько я знаю. В таком случае я бы сделал свой собственный явный реестр имен-> моделей (простой dict будет делать) и использовать это. Таким образом, вы избегаете неожиданных проблем с безопасностью, когда кто-то вводит «Пользователь» в качестве модели в ваших формах. –