Django 在最后一个孩子出生之前,什么样的关系才是最令人沮丧的?
我正在努力寻找一种有效的方式来处理Django m2m关系 我的用例是:Django 在最后一个孩子出生之前,什么样的关系才是最令人沮丧的?,django,django-models,django-related-manager,Django,Django Models,Django Related Manager,我正在努力寻找一种有效的方式来处理Django m2m关系 我的用例是: 我从表单接收一个字符串,并用这个字符串更新元素的状态 如果这个元素有子元素,我会用相同的值更新它们的状态 如果那些children元素有自己的子元素,那么我会更新状态并遍历它们的子元素等 我的模型m2m字段类似于:parent=models.ManyToManyField('self',blank=True,default=None,symmetric=False,verbose_name=“”) 目前我写了这样的东西
- 我从表单接收一个字符串,并用这个字符串更新元素的状态
- 如果这个元素有子元素,我会用相同的值更新它们的状态
- 如果那些children元素有自己的子元素,那么我会更新状态并遍历它们的子元素等
parent=models.ManyToManyField('self',blank=True,default=None,symmetric=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)
但这绝对不是递归的。我需要遍历每个子元素,直到只有子元素。我不知道用什么样的方式来做这件事才是最像pythonish/djangoish的方式
提前感谢您的帮助。简单的方法是向模型中添加一个方法,在所有当前对象子对象上调用相同的方法
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)
实现这一点的简单方法是向模型中添加一个方法,该方法在所有当前对象子对象上调用相同的方法
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)
为什么不呢?但是我该如何递归地调用它呢?调用child.update\u status(status)实际上使它递归。首先,谢谢,这是有效的。但是我不明白它为什么工作,我理解为什么在一个实例的children元素上调用这个方法,但是我不理解为什么在每个children元素上调用它。我真的需要澄清一下。这是正常的递归/python/django行为吗?不确定您不理解什么。此方法调用所有当前对象子对象的
update\u status
方法-调用所有if子对象的update\u status
方法-调用所有if子对象的update\u status
方法,依此类推,这是由于函数定义中的self参数吗?无论如何,谢谢你的回答和解释。为什么不呢?但是我该如何递归地调用它呢?调用child.update\u status(status)
实际上使它递归。首先,谢谢,这很有效。但是我不明白它为什么工作,我理解为什么在一个实例的children元素上调用这个方法,但是我不理解为什么在每个children元素上调用它。我真的需要澄清一下。这是正常的递归/python/django行为吗?不确定您不理解什么。此方法调用所有当前对象子对象的update\u status
方法-调用所有if子对象的update\u status
方法-调用所有if子对象的update\u status
方法,依此类推,这是由于函数定义中的self参数吗?无论如何,谢谢你的回答和解释。