В моем приложении Django есть базовая модель предмета:
class Item(models.Model):
name = models.CharField(max_length=200)
brand = models.ForeignKey(User, related_name='items')
price = models.CharField(max_length=10)
upload_date = models.DateTimeField(auto_now=False, auto_now_add=True)
Для данного предмета я пытаюсь получить следующий и предыдущий предметы в БД.
Я знаю, что могу сделать это с помощью встроенного в Django Model.get_next_by_FOO(**kwargs)
, который прекрасно работает с полем upload_date
, но мне нужно получить предыдущий и следующий элементы с определенными параметрами ИЛИ (например, элементы, имеющие определенной марки ИЛИ по определенной цене).
Я могу получить предыдущий элемент, используя такой запрос:
previous_item = Item.objects.filter(id__lt=item.id).filter(Q(brand__in=brands)|Q(price__lt=100))[:1]
Моя проблема со следующим пунктом. Выполнение того же запроса для следующего элемента приводит к самому последнему элементу в целом, который соответствует критериям, а не к элементу, который идет после текущего элемента в базе данных. Я понимаю, что это из-за того, как Django запрашивает базу данных, но не знаю, как обойти ее, чтобы получить элемент, который идет непосредственно после текущего элемента, который также соответствует критериям.
Существует ли быстрый и простой способ получить следующий элемент для определенного элемента с учетом нескольких параметров ИЛИ?
Спасибо!