我在一个项目中使用摇尾式CMS。我能够创建条目并没有问题地更新它们。
我已经将弹格字段从促进面板移到我的内容面板中。这就是我的models.py的样子:
# models.py
...
content_panels = Page.content_panels + [
FieldPanel('slug'),
...
]
promote_panels = []在创建新条目时,我让Wagtail填充弹格字段。例如,
Birthdaysbirthdays我能够输入所有字段并成功保存条目。
当我创建一个具有相同标题的新条目时,我会得到一个错误(保存时),即段塞必须是唯一的。
ValidationError: {'slug': ['This slug is already in use']}这是合理的,鼻涕虫必须是独特的-然而,我想让摇尾照顾我?我想用同样的页面标题“生日”。
是否有可能让Wagtail捕获异常并将-1、-2等附加到段塞中而不抛出错误?
我来自CraftCMS,这就是创作经验是如何运作的.
发布于 2021-09-01 19:44:05
以下是我发现效果很好的东西。请让我知道,因为我肯定有一个更好,更有效的方法。
# forms.py
from django.utils.text import slugify
...
class MyClass((WagtailAdminPageForm):
cleaned_data = super(WagtailAdminPageForm, self).clean()
# Ensure a unique slug for each entry
if not self.instance.slug:
cleaned_data['slug'] = slugify(f'{cleaned_data.get("title")} {Page.objects.filter(slug__startswith=cleaned_data.get("slug")).count()}')
return cleaned_data当保存具有相同标题的条目时,我不再得到验证错误。因此,我的鼻涕虫看起来是这样的:
示例:
birthdaysbirthdays-1birthdays-2birthdays-3 (等等)我将弹格字段留在管理面板中,这样作者就可以相应地更改它们。
发布于 2021-09-01 20:52:16
Wagtail有一个用于此目的的find_available_slug方法,尽管它是无文档的,并且打算由Wagtail自己使用,因此在将来的版本中可以在没有警告的情况下删除它:
from wagtail.core.utils import find_available_slug
page.slug = find_available_slug('birthdays', parent_page)https://stackoverflow.com/questions/69019768
复制相似问题