我有以下 Django 模型:
class RiskOf(MPTTModel):
parent = TreeForeignKey('self', null=True, blank=True, verbose_name=_(u'catégorie'), related_name='children')
name = models.CharField(_('nom'), max_length=200)
class WorkingPlace(models.Model):
name = models.CharField(_('nom'), max_length=200)
risks = models.ManyToManyField(RiskOf, through='WorkingPlaceRisk', verbose_name=_('risques'))
class WorkingPlaceRisk(models.Model):
working_place = models.ForeignKey(WorkingPlace, verbose_name=_('poste de travail'))
risk_of = models.ForeignKey(RiskOf, blank=True, null=True, verbose_name=_(u'risque DE avérés'))
STATUS_CHOICES = (
(1, _(u'éliminé')),
(2, _(u'réduit')),
)
status = models.IntegerField(_(u'état'), max_length=1, choices=STATUS_CHOICES, null=True, blank=True)
chsct = models.BooleanField(_(u'enquête chsct'))
给定一个 RiskOf 对象(我们称之为 MYRISK),我需要检索所有 WorkingPlace 对象,这些对象至少有一个风险等于或继承于 MYRISK并且标志 chsct 设置为 True。
我知道我可以使用这个:
wplaces = WorkingPlace.objects.filter(workingplacerisk__risk_of__in = MYRISK.get_descendants(include_self=True))
检索至少有一个风险等于或继承于 MYRISK 的所有 WorkingPlace 对象,但我无法找到一种方法来“实现”我需要的第二个条件,以一种可怕且明显不正确的方式编写,我需要类似的东西(只是为了解释更好的我需要)
wplaces = WorkingPlace.objects.filter(workingplacerisk.filter(chsct=True)__risk_of__in = MYRISK.get_descendants(include_self=True))
有任何想法吗?