在我的模型中有两个类:
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
应该怎么做?
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')