Как сделать сложную сортировку в Django сквозь две доп. таблицы?

Являюсь новичком в Django. SQL вроде понимаю, но вот с этими кверисетами никак не пойму.

У меня есть три таблицы (модели):

class Scheduler(models.Model):
    host_id = models.IntegerField()
    check_id = models.IntegerField()

class Hosts(models.Model):
    order = models.IntegerField(default=0)

class Checks(models.Model):
    order = models.IntegerField(default=0)

Не влияющие на суть вопроса поля я убрал.

И вот мне нужно получить список объектов Scheduler, чтобы они были отсортированы.
Простая сортировка вот так: order_by("host_id", "check_id") - сначала сортируем по host_id потом по check_id, это ясно.
Но мне нужно чтобы вместо host_id подставлялся order из таблицы Hosts, а вместо check_id подставлялся соответствующий order из таблицы Checks.

Может быть сами модели надо как то переделать для того чтобы такую сортировку можно было организовать без перебора всех объектов и сортировки по сути "вручную". Так то понятно, что можно просто перебрать все объекты Scheduler и вручную пересортировать. Но это будет индусское программирование...
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@Everything_is_bad
host_id = models.IntegerField()
check_id = models.IntegerField()
Это вообще неправильно, IntegerField надо заменить на ForeignKey, и тогда в order_by будет host__order и check__order. Ну и ссылки на другие таблицы называют без _id, а название моделей применять в единственно числе. Короче, тебе бы туториал пройти.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы