从具有特定规则集的父行中选择子项

时间:2018-10-03 04:25:59

标签: django postgresql django-models orm

我有一个父模型,该模型具有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"的Child对象。我很难满足的部分需求是,例如,我可能在BsAs之间有一些Cs,它们排成一行:

 [R]        [R]         [R]
Apple       Cat         Cat

如果它们之间没有B状态,我想检索AsCs,但是我有一个特殊情况,我想在下一个检索之前检索最新的B C而不是AB本身。

            [R]                                 [R]                     [R]         [R]
Apple       Ball        Cat         Ball        Ball        Cat         Ball        Cat

总结:

如果在As或Cs后面有B或行的末尾是B,我想总是选择下一个C之前的最新B。

PostgreSQL完全可以做到吗?由于缺少查询所有内容并使用Python进行数据批量处理的功能,因为我正在显示记录的表是分页的。

1 个答案:

答案 0 :(得分:1)

@PauloScardine有一个好主意,着手使用MPTT始终选择对象(如果它是球)作为父对象。谢谢!