在Django中,如何获得具有特定反向关系的所有记录的查询集?

时间:2015-09-30 16:54:29

标签: django

所以,我有一个简化到这个

的数据模型
class Activity(models.Model):
    start_date = models.DateField()
    title = models.TextField()
    ...

class Outcome(models.Model):
    title = models.TextField()
    code = models.CharField(max_length=20)
    ...

class ActivityOutcome(models.Model):
    note = models.TextField()
    outcome = models.ManyToMany(Outcome)
    activity = models.ManyToMany(Activity)

class Organisation(models.Model):
    title = models.TextField()
    outcomes = models.ManyToManyField(Outcome, related_name='outcome_organisation')
    ...

class Programme(models.Model 
    title = models.TextField()
    outcomes = models.ManyToMAnyField(Outcome, related_name='outcome_programme')
    ...

我想拥有一个ActivityOutcome类,因为它使处理起来更简单,但我需要有一些Programme结果和一些Organisation结果。如果我想要一个所有" Program"的QuerySet。结果,我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以使用__isnull过滤所有具有相关计划的结果。

outcomes = Outcome.objects.filter(outcome_programme__isnull=False)

如果多个程序可以获得相同的结果,您可能需要使用distinct()来防止重复。

outcomes = Outcome.objects.filter(programme__isnull=False).distinct()