2012-09-09 182 views
1

在我的模型有兩類:Django的過濾器

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) 

我試圖找回 (一)一個頁面來查看,並 (二)屬於所有其他網頁該頁面所屬的同一類別也是爲了列出它們。

這是我在做什麼(這是錯誤的):

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

那應該怎麼辦呢?

回答

2

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')