确定通过多对多关系链接的“可达”对象

时间:2016-04-30 12:09:24

标签: python django django-models

我的模型设置了多对多关系,可以将项目分成组和类别:

class DownloadableResourceGroup(models.Model):
    pass

class DownloadableResourceCategory(models.Model):
    pass

class DownloadableResource(models.Model):    
    res_categories = models.ManyToManyField(DownloadableResourceCategory, blank=True)
    res_groups     = models.ManyToManyField(DownloadableResourceGroup, blank=True

每个视图都有一个分配给它的资源组,它提供资源的初始过滤。然后,我想根据类别应用更多过滤器。我的问题是 - 如何从DownloadableResourceCategories获取DownloadableResources的{​​{1}}列表,而不是迭代它们?我只想显示当前视图中DownloadableResourceGroup上显示的类别,并且不希望显示其中没有任何项目的类别。

进一步说明我在做什么:

DownloadableResources

1 个答案:

答案 0 :(得分:1)

您可以获得以下所有相关类别:

relevant_categories = DownloadableResourceCategory.objects.filter(
                           downloadableresource__in=items).distinct()

请注意distinct()的使用,因为它是m2m关系,您可以多次获得类别。 distinct只会返回此案例中的唯一类别。