Django使用m2m和中间(通过)模型进行查找

时间:2013-10-22 13:43:12

标签: 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 = 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),我需要检索所有至少有一个风险等于或后代的工作对象MYRISK AND ,并将标志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))

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

wplaces = WorkingPlace.objects.filter(workingplacerisk__risk_of__in = MYRISK.get_descendants(include_self=True) , workingplacerisk__chsct = True)
相关问题