У меня есть родительская модель, в которой более 30 000 записей, каждая из которых имеет не менее 3-4 детей.Я хочу иметь возможность отображать детей на столе с очень специфическим набором правил.
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Parent(models.Model):
name = models.CharField(_("Name"), max_length=128)
class Child(models.Model):
parent = models.ForeignKey(Parent)
state = models.CharField(
_("State"), choices=(
('A', "Apple"),
('B', "Ball"),
('C', "Cat"),
('D', "Dog"),
)
)
Используя две вышеупомянутые модели, я отфильтровал все дочерние объекты, которые имеют state is "A" or "B"
.Часть требований, которые мне трудно выполнить, заключается в том, что, возможно, у меня есть Bs
между As
и Cs
, например, расположенные в ряд:
[R] [R] [R]
Apple Cat Cat
Если онибез промежуточных состояний, я хочу получить As
и Cs
, но у меня есть особый случай, когда я хочу получить последнее B
до следующего C
вместо A
или B
себя.
[R] [R] [R] [R]
Apple Ball Cat Ball Ball Cat Ball Cat
В итоге:
Я хочу всегда выбирать самый последний B перед следующим C, если есть B после As или Cs или конца строкитакое B.
Возможно ли это с PostgreSQL?Из-за отсутствия запросов ко всему и массирования данных с помощью Python, потому что таблица, в которой я отображаю записи, разбита на страницы.