@HeyAway

Как обратиться к атрибуту объекта динамически?

Простите, но не знаю по каким ключевикам искать.

Скажем, есть код получения данных из бд и их сортировки(схематично):
if sort_by == "date" : sort_by = Articles.created.desc()
Articles.select().order_by(sort_by).offset(offset).limit(limit)


Либо:

if sort_by == "created" : sort_by = Articles.created.desc()
Articles.select().order_by(sort_by).offset(offset).limit(limit)


Этих самых значений "sort_by" очень много и получается довольно длинный список. Добавим это к тому, что в приложении полно разделов и много моделей, которые работают по одному сценарию: запрос -> получить параметры сортировки -> получить данные из модели. Для каждого раздела один и тот же код, можно сказать. Ужасно.

Так вот, еще раз попрошу прощения, как объединить весь этот код в одну функцию типа:
sort_by - string
def get_all_data(Model, sort_by, offset, limit):
    try:
         sort_by = Model.%SORT_BY%.desc()
         return Model.select().order_by(sort_by).offset(offset).limit(limit)
    except:
         raise Exception("xxx")


Это, возможно, базовые основы. Правда и я не программист, но вышло так, что пришлось столкнуться с данной сферой. Был небольшой опыт в JS.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
TheDeadOne
@TheDeadOne
Седой и строгий
attr_name = 'created'
sort_by = getattr(Model, attr_name).desc()

Но вообще для подобных задач лучше использовать движки полнотекстового поиска, типа Elasticsearch.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Popmechanic Москва
от 100 000 до 150 000 руб.
Panda Media Нижний Новгород
от 70 000 руб.
НЛ Континент Новосибирск
от 60 000 до 100 000 руб.