Выбор детей из родительской строки с очень специфическим набором правил - PullRequest
0 голосов
/ 03 октября 2018

У меня есть родительская модель, в которой более 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, потому что таблица, в которой я отображаю записи, разбита на страницы.

1 Ответ

0 голосов
/ 12 октября 2018

@ У ПаулоСкардина была хорошая идея: он использовал MPTT, чтобы всегда выбирать объект перед ним в качестве Родителя, если это был Шар.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...