1

私のモデルには2つのクラスがあります。

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)表示する1つのページ、および(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

それはどのように行われるべきですか?

4

1 に答える 1

4

page.categoriesは(チェックに必要な)ManyRelatedManagerのリストではありません。そのため、フィルタリングするように指定する必要があります。categories__inpage.categories.all()__in

クエリが次のように変わります:

pages = Page.objects.filter(displayable=True, 
        categories__in=page.categories.all()).
        exclude(pk=page.id).order_by('-timestamp')
于 2012-09-09T07:08:12.873 に答える