在最后一个孩子之前,最常见的关系是什么?

时间:2017-09-18 14:01:52

标签: django django-models django-related-manager

我正在努力寻找一种有效的方式来完成Django m2m关系。

我的用法是:

  • 我从表单中收到一个字符串,并使用此字符串更新元素的状态。
  • 如果此元素有子元素,我会使用相同的值更新其状态。
  • 如果这些儿童元素有自己的孩子,那么我会更新状态并通过他们的孩子等。

我的模型m2m字段类似于:parent = models.ManyToManyField('self', blank=True, default=None, symmetrical=False, verbose_name="")

目前我写的是这样的:

if model == Ensemble:
    children = elem.ensemble_set.all()
    for child in children:
        update_elem_statut(child, statut)
        for en in child.ensemble_set.all():
            update_elem_statut(en, statut)
            if len(en.ensemble_set.all()):
                for en_child in en.ensemble_set.all():
                    update_elem_statut(en_child, statut)

但这绝对不是递归的。我需要遍历每个孩子,直到只有儿童元素。我不知道什么是最蟒蛇/ djangoish方式来做到这一点。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

简单的方法是在模型中添加一个方法,在所有当前对象上调用相同的方法

class Ensemble(models.Model):

    def update_status(self, status):
        self.status = status
        self.save()
        for child in self.ensemble_set.all():
            child.update_status(status)