Fix Wagtail article publish regressions
This commit is contained in:
@@ -222,7 +222,24 @@ class ArticlePageAdminForm(WagtailAdminPageForm):
|
||||
self.initial["category"] = default_category.pk
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = getattr(self, "cleaned_data", {})
|
||||
self._apply_defaults(cleaned_data)
|
||||
self.cleaned_data = cleaned_data
|
||||
|
||||
cleaned_data = super().clean()
|
||||
self._apply_defaults(cleaned_data)
|
||||
|
||||
if not cleaned_data.get("slug"):
|
||||
self.add_error("slug", "Slug is required.")
|
||||
if not cleaned_data.get("author"):
|
||||
self.add_error("author", "Author is required.")
|
||||
if not cleaned_data.get("category"):
|
||||
self.add_error("category", "Category is required.")
|
||||
if not cleaned_data.get("summary"):
|
||||
self.add_error("summary", "Summary is required.")
|
||||
return cleaned_data
|
||||
|
||||
def _apply_defaults(self, cleaned_data: dict[str, Any]) -> dict[str, Any]:
|
||||
title = (cleaned_data.get("title") or "").strip()
|
||||
|
||||
if not cleaned_data.get("slug") and title:
|
||||
@@ -237,14 +254,6 @@ class ArticlePageAdminForm(WagtailAdminPageForm):
|
||||
max_chars=self.SUMMARY_MAX_CHARS,
|
||||
) or title
|
||||
|
||||
if not cleaned_data.get("slug"):
|
||||
self.add_error("slug", "Slug is required.")
|
||||
if not cleaned_data.get("author"):
|
||||
self.add_error("author", "Author is required.")
|
||||
if not cleaned_data.get("category"):
|
||||
self.add_error("category", "Category is required.")
|
||||
if not cleaned_data.get("summary"):
|
||||
self.add_error("summary", "Summary is required.")
|
||||
return cleaned_data
|
||||
|
||||
def _get_default_author(self, *, create: bool) -> Author | None:
|
||||
@@ -374,9 +383,20 @@ class ArticlePage(SeoMixin, Page):
|
||||
self.summary = _generate_summary_from_stream(self.body) or self.title
|
||||
if not self.published_date and self.first_published_at:
|
||||
self.published_date = self.first_published_at
|
||||
self.read_time_mins = self._compute_read_time()
|
||||
if self._should_refresh_read_time():
|
||||
self.read_time_mins = self._compute_read_time()
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
def _should_refresh_read_time(self) -> bool:
|
||||
if not self.pk:
|
||||
return True
|
||||
|
||||
previous = type(self).objects.only("body").filter(pk=self.pk).first()
|
||||
if previous is None:
|
||||
return True
|
||||
|
||||
return previous.body_text != self.body_text
|
||||
|
||||
def _compute_read_time(self) -> int:
|
||||
words = []
|
||||
for block in self.body:
|
||||
|
||||
Reference in New Issue
Block a user