2010-01-08 245 views
2

我在同一個應用程序中有兩個模型。該應用程序被稱爲「新聞」,它的模型中有兩個類,分別稱爲「文章」和「類別」。通過外鍵複雜的Django查詢

class Category(models.Model): 
    name = models.CharField(_("Name"), max_length=100) 
    slug = models.SlugField(_("Slug"), max_length=100, unique=True) 

class Article(models.Model): 
    category = models.ForeignKey(Category, verbose_name=_("Category")) 
    archived = models.BooleanField(_("Archive this?"), default=False) 

我想創建一個查詢,顯示歸檔的所有文章,但按類別分組。

我該如何有效地完成這項工作?

+0

請不要告訴我這是這麼簡單: >>> c = Category.objects.filter(article__archived = True) – blackrobot

+0

看到我的答案,所以我可以確切地看到你的意思。 –

回答

3

C = Category.objects.filter(article__archived = TRUE)

3
Article.objects.filter(archived=True).order_by('category') 

我在編輯這個以獲得更多信息來嘗試和幫助。

給出:

  • CAT1
    • ART1
    • ART2歸檔的
    • ART3
  • CAT2
    • ART4
    • ART5
    • art6歸檔的
  • CAT3
    • art7歸檔的
    • art8歸檔的
    • art9

,你會想你的queryset包含?

+0

實際上是Category.objects.filter(article__archived = True)的作品。 – blackrobot

+0

@blackrobot:但你說你想要'文章'。你的查詢(假設它有效,我沒有測試過)會返回包含已存檔'Articles'的Categorys。 Brandon H的查詢將返回'Category'命令的'Articles'列表。 –

+0

是的,我想要「按類別分組」。 – blackrobot

2

這不是你想要的嗎?

class Article(models.Model): 
    category = models.ForeignKey(Category, related_name='articles') 
    archived = models.BooleanField(default=False) 

categories = Category.objects.select_related("articles").filter(articles__archived=True)