在我的模型中有两个类:
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
应该如何做?
答案 0 :(得分:4)
page.categories
是ManyRelatedManager
,而不是categories
的列表(__in
检查所需)。因此,您需要指定page.categories.all()
到__in
过滤器。
您的查询更改为:
pages = Page.objects.filter(displayable=True,
categories__in=page.categories.all()).
exclude(pk=page.id).order_by('-timestamp')