我在wagtail中保存文章页面时遇到一些问题,我有3个类:ArticlePageModule、ArticlePageModulePlacement和ArticlePage
错误显示:
File "/opt/miniconda3/envs/nefodev/lib/python3.7/site-packages/django/db/models/base.py", line 1222, in full_clean
raise ValidationError(errors)
django.core.exceptions.ValidationError: {'title': ['This field cannot be blank.']}
我的目的是创建一部分动态文章,您可以使用以下代码段添加这些文章:
我的代码(由以下代码支持:this)
from django.db import models
from wagtail.core.fields import StreamField
from wagtail.admin.edit_handlers import FieldPanel, StreamFieldPanel, InlinePanel
from wagtail.images.edit_handlers import ImageChooserPanel
from wagtail.core.models import Page, Orderable
from modelcluster.fields import ParentalKey
from wagtail.snippets.models import register_snippet
from wagtail.snippets.edit_handlers import SnippetChooserPanel
from wagtail.images.blocks import ImageChooserBlock
from wagtail.core import blocks
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
# Create your models here.
@register_snippet
class ArticlePageModule(models.Model):
title = models.CharField(max_length=80)
subtitle = models.CharField(max_length=50)
thumbImage = models.ForeignKey(
'wagtailimages.Image',
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name='+'
)
panels = [
FieldPanel('title'),
FieldPanel('subtitle'),
ImageChooserPanel('thumbImage')
]
def __str__(self):
return self.title
class ArticlePageModulePlacement(Orderable, models.Model):
page = ParentalKey('blog.ArticlePage', on_delete=models.CASCADE, related_name='article_module_placements')
article_module = models.ForeignKey(ArticlePageModule, on_delete=models.CASCADE, related_name='+')
slug = models.SlugField()
panels = [
FieldPanel('slug'),
SnippetChooserPanel('article_module'),
]
class ArticlePage(Page, RoutablePageMixin):
content = StreamField([
('heading', blocks.CharBlock()),
('content', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
])
content_panels = [
InlinePanel('article_module_placements', label="Modules"),
StreamFieldPanel('content')
]
@route(r'^module/(?P<slug>[\w\-]+)/$')
def page_with_module(self, request, slug=None):
self.article_module_slug = slug
return self.serve(request)
def get_context(self, request):
context = super().get_context(request)
if hasattr(self, 'article_module_slug'):
context['ArticlePageModule'] = self.article_module_placements.filter(slug = self.article_module).first().article_module
return context
您遗漏了
content_panels
中的页面标题字段——正如错误消息所说,这是页面模型上的必填字段。通常,您会从Page.content_panels
中提取这个:相关问题 更多 >
编程相关推荐