使用m2m和中间(直通)模型的Django查找

使用m2m和中间(直通)模型的Django查找,django,django-queryset,Django,Django Queryset,我有以下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

我有以下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对象,其中至少有一个risk等于MYRISK,且标志chsct设置为True

我知道我可以用这个:

wplaces = WorkingPlace.objects.filter(workingplacerisk__risk_of__in = MYRISK.get_descendants(include_self=True))
要检索所有WorkingPlace对象,其中至少有一个风险等于或是MYRISK的后代,但我找不到一种方法来“实现”我需要的第二个条件,以一种可怕且明显不正确的方式编写,我需要这样的东西(只是为了更好地解释我需要什么)


有什么想法吗

workingplacerisk\uuu chsct=True,workingplacerisk\uuu risk\uu of\uuuu in=…
应该可以工作谢谢,它可以工作。我想这样我也会得到这样一个例子:考虑一个有2个风险的工作场所,第一个(1)是MyValk的后代,第二个(2)不是,1的CHSCT标志设置为假,2设置为真。我必须排除这样一个案例,你的答案是正确的,而我认为它也会检索这个工作场所的例子。
wplaces = WorkingPlace.objects.filter(workingplacerisk__risk_of__in = MYRISK.get_descendants(include_self=True) , workingplacerisk__chsct = True)
wplaces = WorkingPlace.objects.filter(workingplacerisk__risk_of__in = MYRISK.get_descendants(include_self=True) , workingplacerisk__chsct = True)