g:获取带有相关父母计数的摘要列表

时间:2018-11-20 17:08:20

标签: django wagtail

使用Wagtail我有ArticlePage个,每个{0}可以有0个或更多Author,这些都是摘要。

我想获得Author的列表以及它们所附加的ArticlePage的数量,但无法解决。我对ModelCluster感到困惑,因为我对香草Django会很好。

(我什至不确定我是否过于复杂;我不需要作者在文章上可排序...)

from django.db import models
from modelcluster.fields import ParentalKey
from wagtail.admin.edit_handlers import InlinePanel
from wagtail.core.models import Orderable, Page
from wagtail.snippets.edit_handlers import SnippetChooserPanel
from wagtail.snippets.models import register_snippet

class ArticlePage(Page):
    content_panels = Page.content_panels + [
        InlinePanel('authors', label='Authors'),
    ]

@register_snippet
class Author(models.Model):
    name = models.CharField(max_length=255, blank=False)

    panels = [
        FieldPanel('name'),
    ]

class ArticleAuthorRelationship(Orderable, models.Model):
    author = models.ForeignKey(
                'Author',
                on_delete=models.CASCADE,
                related_name='+')

    page = ParentalKey(
                'ArticlePage',
                on_delete=models.CASCADE,
                related_name='authors')

    panels = [
        SnippetChooserPanel('author'),
    ]

FWIW,我知道我可以使用Author来获得article.get_usage()的一篇文章,这很方便!

1 个答案:

答案 0 :(得分:0)

回到一天后,我认为,唯一的问题是将related_name的{​​{1}}属性的ArticleAuthorRelationship设置为{{1} }(从author到该模型的means there's no backwards relationship)。

如果我改为这样做:

'+'

然后我可以很容易地做到这一点:

Author

然后class ArticleAuthorRelationship(Orderable, models.Model): author = models.ForeignKey( 'Author', on_delete=models.CASCADE, related_name='articles') # Changed this to 'articles' # etc. QuerySet中的每个项目都有一个from django.db.models import Count from my app.models import Author authors = Author.objects.annotate(num_articles=Count('articles')).order_by('-num_articles') 属性。

我通常设置一个authors,但这在Wagtail文档中似乎不太常见,而且我几乎没有注意到我在这里复制了这种行为,所以这让我很恼火。

如果有人正在阅读此书,并且可以举例说明为什么/何时要将num_articles设置为related_name,我很想知道。谢谢。