【发布时间】:2022-01-18 05:31:51
【问题描述】:
我没有在网站上看到任何这样的问题。所以希望这个问题将来对其他人有用。
我有一个 PostPage、EditorialPage 和 DocumentPage。在这三个模型中,我添加了一个“特色”布尔值,这样如果在设置中切换,任一帖子都会在主页上出现。
但是,在 HomePage/Models 中,我只能让它与 PostPage 一起使用。我对查询/查询集不太热衷,但我觉得这与此有关。我已经多次阅读文档,但我不明白如何进行这项工作。
博客/Models.py
class PostPage(Page):
header_image = models.ForeignKey(
"wagtailimages.Image",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
)
featured = models.BooleanField(default=False)
highlight = models.BooleanField(default=False)
description = models.CharField(max_length=255, blank=True,)
body = StreamField(BodyBlock(), blank=True)
tags = ClusterTaggableManager(through="blog.PostPageTag", blank=True)
post_date = models.DateTimeField(
verbose_name="Post date", default=datetime.datetime.today
)
content_panels = Page.content_panels + [
ImageChooserPanel("header_image"),
FieldPanel("description", classname="full"),
InlinePanel("blog_authors", label="author", min_num=1, max_num=4),
MultiFieldPanel([
InlinePanel("categories", label="category",),
FieldPanel("tags"),
], heading="Meta"),
StreamFieldPanel("body"),
]
settings_panels = Page.settings_panels + [
FieldPanel("post_date"),
MultiFieldPanel([
FieldPanel("featured"),
FieldPanel("highlight"),
], heading="Showcase")
]
Home/Models.py(方法一)
class HomePage(RoutablePageMixin, Page):
def get_context(self, request):
featured_post = PostPage.objects.live().public().filter(featured=True)
featured_editorial = EditorialPage.objects.live().public().filter(featured=True)
feature_document = DocumentPage.objects.live().public().filter(featured=True)
featured_select = sorted(
chain(featured_post, featured_editorial, feature_document),
key=lambda page: page.first_published_at, reverse=True)[0]
return featured_select
Home/Models.py(方法二)
class HomePage(RoutablePageMixin, Page):
def get_context(self, request):
context = super().get_context(request)
featured_post = PostPage.objects.live().filter(featured=True)
featured_post = EditorialPage.objects.live().filter(featured=True)
featured_post = DocumentPage.objects.live().filter(featured=True)
context['featured_post'] = featured_post.live().public()
return context
def get_posts(self):
return PostPage.objects.descendant_of(self).live().order_by("-post_date")
提前感谢任何与此帖子联系的人。我在 11 月才开始使用 Python。所以我还是很新鲜,我想。
【问题讨论】:
标签: python django django-models wagtail