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