Пользовательский поиск в Django (параметр фильтра отличается от типа поля)

У меня есть простая модель в Django.

class Books(models.Model):
    title = models.CharField(max_length=255)
    page_size = models.IntegerField(null=True)

Пример экземпляра этой модели может выглядеть следующим образом: ("Alice's Adventures in Wonderland", 70).

Я хочу создать поиск, который позволит пользователям фильтровать книги по размеру страниц в следующей форме

  1. if the user types (inside the filter box) >n Django filter would return only books which have more pages than n,
  2. if the user types <n Django filter would return only books with less pages than n.

Подводя итог, мне бы понадобился поиск __cmp, который был бы способен присоединиться к набору запросов перед его выполнением.

Так что я хотел бы, чтобы блок if-else был реализован где-то внутри.

filter_param, value = filter_param, filter_value = list(user_filter)
if filter_param == ">":
    qr = Books.objects.filter(page_size__gt=n)
else:
    qr = Books.objects.filter(page_size__lt=n)

Можно ли создать пользовательский поиск, реализующий такую логику?

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