如何过滤ForeignKey MPTT模型的所有后代?

时间:2015-03-10 20:58:20

标签: django django-models django-mptt

情况如下。我正在Django中使用MPTT模型来创建音乐类型的层次结构(Rock,Hard Rock等)。我正在将此层次结构中的一个节点分配给相册。假设我用Hard Rock类型创建了一个Album对象。如何查询我的专辑中的所有Rock专辑,并将其包含Rock和Rock类型的所有后代?

class Genre(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __unicode__(self):
        return self.name


class Album(models.Model):
    name= models.CharField(max_length=200)
    genre= models.ForeignKey(Genre)

1 个答案:

答案 0 :(得分:3)

使用MPTTModel的<{3}}方法:

genres = album.genre.get_descendants(include_self=True)
albums = Album.objects.filter(genre__in=genres)