DjangoCMSであるwagtailを使用して、1つのアプリを開発しています。その中でブログも追加し、そのブログに対してカテゴリー機能を実装したいです。現在、すでに実装はされていおり。管理者画面のスニペットからカテゴリーの登録、カテゴリーの表示、適切なクエリの表示までできています。しかし、そのカテゴリーを押すとしっかりとクエリに反映されるのですが、カテゴリー分けされたブログ記事は表示されません。これを直したいです。
追記:
じぶんで再考しコードを書き換えました。
def get_context(self, request, *args, **kwargs): """Adding custom stuff to our context.""" context = super().get_context(request, *args, **kwargs) context["categories"] = BlogCategory.objects.all() category = BlogCategory.objects.get(slug=slug) # もしカテゴリーの指定があればカテゴリーと紐づいた記事のみ表示 if category: context["posts"] = BlogDetailPage.objects.live().public().filter(categories__in=[category]) # もしカテゴリー指定がなければ→すべての記事を表示 else: context["posts"] = BlogDetailPage.objects.live().public() return context
エラーとしてslugが定義されていませんと表示されます。defないで再定義する必要があるのでしょうか?
以下のコードが原因となるものです。
python
1#models.py 2 3from django.db import models 4from django import forms 5from modelcluster.fields import ParentalManyToManyField 6from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel, MultiFieldPanel 7from wagtail.core.fields import StreamField 8from wagtail.core.models import Page 9from wagtail.images.edit_handlers import ImageChooserPanel 10from wagtail.snippets.models import register_snippet 11 12from streams import blocks 13 14@register_snippet 15class BlogCategory(models.Model): 16 """Blog category for a snippet.""" 17 18 name = models.CharField(max_length=255) 19 slug = models.SlugField( 20 verbose_name="slug", 21 allow_unicode=True, 22 max_length=255, 23 help_text='A slug to identify posts by this category', 24 ) 25 26 panels = [ 27 FieldPanel("name"), 28 FieldPanel("slug"), 29 ] 30 31 class Meta: 32 verbose_name = "Blog Category" 33 verbose_name_plural = "Blog Categories" 34 ordering = ["name"] 35 36 def __str__(self): 37 return self.name 38 39 40class BlogListingPage(Page): 41 42 template = "blog/blog_listing_page.html" 43 44 blog_title = models.CharField( 45 max_length=100, 46 blank=True, 47 null=True, 48 help_text='Overwrites the default title', 49 ) 50 51 content_panels = Page.content_panels + [ 52 FieldPanel("blog_title"), 53 ] 54 55 def get_context(self, request, *args, **kwargs): 56 """Adding custom stuff to our context.""" 57 context = super().get_context(request, *args, **kwargs) 58 context["posts"] = BlogDetailPage.objects.live().public() 59 context["categories"] = BlogCategory.objects.all() 60 return context 61 62 63class BlogDetailPage(Page): 64 """Blog detail page.""" 65 66 template = "blog/blog_detail_page.html" 67 blog_title = models.CharField( 68 max_length=100, 69 blank=False, 70 null=False, 71 help_text='Overwrites the default title', 72 ) 73 blog_image = models.ForeignKey( 74 "wagtailimages.Image", 75 blank=False, 76 null=True, 77 related_name="+", 78 on_delete=models.SET_NULL, 79 ) 80 categories = ParentalManyToManyField("blog.BlogCategory", blank=True) 81 content = StreamField( 82 [ 83 ("title_and_text", blocks.TitleAndTextBlock()), 84 ("full_richtext", blocks.RichtextBlock()), 85 ], 86 null=True, 87 blank=True, 88 ) 89 90 content_panels = Page.content_panels + [ 91 FieldPanel("blog_title"), 92 ImageChooserPanel("blog_image"), 93 StreamFieldPanel("content"), 94 MultiFieldPanel( 95 [ 96 FieldPanel("categories", widget=forms.CheckboxSelectMultiple) 97 ], 98 heading="Categories" 99 ), 100 ] 101
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。