django过滤了ManyToManyField的其他对象

时间:2012-09-09 05:49:52

标签: django manytomanyfield

在我的模型中有两个类:

class PageCategory(models.Model):
    name = models.CharField(max_length=256)
    slug = models.CharField(max_length=256, default='')

class Page(models.Model):
    title = models.CharField(max_length=256)
    slug = models.CharField(max_length=256)
    categories = models.ManyToManyField(PageCategory, related_name='page_categories', null=True, blank=True)

我正在尝试检索 (a)一页查看,和 (b)属于该页所属的相同类别的所有其他页面,以便列出它们。

这就是我正在做的事情(这是错误的):

def pageView(request, page_slug):
    page = get_object_or_404(Page, slug=unicode(page_slug))
    pages = Page.objects.filter(displayable=True, categories__in=page.categories).exclude(pk=page.id).order_by('-timestamp')

我总是得到'ManyRelatedManager' object is not iterable

应该如何做?

1 个答案:

答案 0 :(得分:4)

page.categoriesManyRelatedManager,而不是categories的列表(__in检查所需)。因此,您需要指定page.categories.all()__in过滤器。

您的查询更改为:

pages = Page.objects.filter(displayable=True, 
        categories__in=page.categories.all()).
        exclude(pk=page.id).order_by('-timestamp')