我使用parent_page_types和subpage_types愉快各地我的页面的模型.
但我坚持class HomePage(Page)只允许我作为根级别的直接孩子.
任何提示?
我们有一个类似博客的网站,并且希望在我们的帖子类型中添加评论。每个帖子都是一个page对象。
我们考虑过使用django-contrib-comments或使用ajax实现自己的纯django注释应用程序。
但是,在公用w站点上具有评论功能(仅适用于使用ajax登录的w用户)的“全wa方法”是什么?
我们并不是在寻找完整的实现,我们只是需要一些暗示或技巧即可。
我们的实际方法是在wagtail admin中将注释作为InlinePanel每个注释PostPage。但是我们正在努力呈现一个django表单,以便在前端添加新评论:
# blog/models.py
class PostPage(RoutablePageMixin, Page):
...field definitions...
@route(r'^comment/new/$')
def add_comment_to_post(self, request):
from .forms import CommentForm
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save()
return render(request, self.template, {
'page': self,
'comment': comment,
})
else:
form = CommentForm()
return render(request, self.template, {
'page': self,
'form': form,
})
content_panels = Page.content_panels + [
...FieldPanels...
InlinePanel('comments', label="Comments"),
]
class Comment(models.Model):
text = models.TextField()
panels = [FieldPanel('text'),] …Run Code Online (Sandbox Code Playgroud) 我很难实现像"嵌套类别"这样的东西:
PageA:
- Cat1
- SubCat1
- SubCat2
- ...
- Cat2
- SubCat1
- ...
Run Code Online (Sandbox Code Playgroud)
所有类别和子类别都应由编辑器订购和编辑.
我的猜测是这样的:
class CategoryTestPage(Page):
content_panels = Page.content_panels + [
InlinePanel('categories')
]
class Category(Orderable,ClusterableModel,models.Model):
page = ParentalKey(CategoryTestPage, related_name='category')
category = models.CharField(max_length=250)
def __str__(self):
return "%d %s" % (self.id, self.category)
panels = [
FieldPanel('category'),
InlinePanel('subcategory')
]
class SubCategory(Orderable,models.Model):
category = ParentalKey(ProjektOrdnung, related_name='subcategory')
subcategory = models.CharField(max_length=250)
def __str__(self):
return "%d %s" % (self.id, self.subcategory)
panels = [
FieldPanel('subcategory')
]
Run Code Online (Sandbox Code Playgroud)
但这导致了'CategoryForm' object has no attribute 'formsets'.似乎嵌套 …
在Wagtail CMS中,我不知道如何构建指向特定页面的链接.我希望模板中的(固定的,未创作的)链接从我BlogIndexPage到我的BlogIndexArchivePage反之亦然.在官方文档中,pageurl看起来很有希望:
{% load wagtailcore_tags %}
...
<a href="{% pageurl self.blog_page %}">
Run Code Online (Sandbox Code Playgroud)
但是我不明白这个符号blog_page,但它page-classes的名字是BlogPage或者BlogIndexPage.我是否必须定义我将链接到的页面models.py- 如果是这样的话:如何?
如何在 Django 用户模型保存后执行某些操作,包括对 m2m 字段的相关更改,例如django.contrib.auth.models.Group?
我有一个自定义 Django 用户模型,并且希望在用户实例(包含 m2m 组成员身份等相关更改)成功保存到数据库后触发一些操作。\n这里的用例是 Wagtail CMS,我在其中ProfilePage为每个用户实例创建 s。根据用户实例的组成员身份,我需要做一些事情。
在自定义模型save()方法中,我无法引用更改后的组成员身份,因为 m2m 是在保存用户实例后保存的。即使在调用后运行我的自定义函数super().save(),新的组成员资格仍不可用。\n但我需要获取新的组成员身份,以便根据该用户的新组执行某些操作。
save()# file: users/models.py\nclass CustomUser(AbstractUser):\n super().save(*args, **kwargs)\n do_something()\nRun Code Online (Sandbox Code Playgroud)\n\n由于上面简单的 save() 方法没有达到目的,我尝试了post_save用户模型的信号:
# file users/signals.py\n@receiver(post_save, sender=get_user_model())\ndef handle_profilepage(sender, instance, created, **kwargs):\n action = \'created\' if created else \'updated\'\n do_something()\nRun Code Online (Sandbox Code Playgroud)\n\n...但即使在这里,我也总是从小组成员中获取“旧”价值观。
\n\n我了解到有一个m2m_changed信号可以用来监视表的变化 …
在 Wagtail 项目中的 Django 模型中,该模型作为模型管理实例连接,我想从以下实例访问数据HelpPanel:
# file: models.py
class ExpertiseApproval(models.Model):
expertise = models.ForeignKey(
ProfilePageExpertises,
on_delete=models.SET_NULL,
blank=True,
null=True,
)
approved = models.BooleanField(
default=False,
)
def get_expertise_repr(self):
return 'Expertise: {}'.format(self.expertise)
panels = [
HelpPanel(
heading='Approving expertises',
content='{}'.format(get_expertise_repr(self)),
),
FieldPanel('approved'),
]
Run Code Online (Sandbox Code Playgroud)
但是通过上面的代码,我得到了一个“自我未定义”:
# traceback snippet
content='{}'.format(get_expertise_repr(self)),
NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
该self面板中的定义似乎不成为self从我想在这里使用的模型实例。
任何想法如何从这个HelpPanel定义中的绑定模型实例访问数据?
我的鹡鸰网站项目是在不同的应用程序拆分,像core,event,publications等等,我建立了我的streamfield中core.models。
现在我想不仅core.models在event.models.
但是,只定义StreamBlock一次流场(子类化)并在所有应用程序中重用它的最优雅(干)方式是什么?
我StreamBlock的灵感来自wagtaildemo项目:
# core/models.py
class StoryBlock(StreamBlock):
h2 = CharBlock(icon="title", classname="title")
h3 = CharBlock(icon="title", classname="title")
h4 = CharBlock(icon="title", classname="title")
intro = RichTextBlock(icon="pilcrow")
paragraph = RichTextBlock(icon="pilcrow")
aligned_image = ImageBlock(label="Aligned image")
pullquote = PullQuoteBlock()
read_on = ReadOnBlock()
Run Code Online (Sandbox Code Playgroud)
——
# event/models.py
from wagtail.wagtailcore.fields import StreamField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, StreamFieldPanel
from core.models import StoryBlock
class EventIndexPage(Page):
body = StreamField(StoryBlock())
content_panels = Page.content_panels + [ …Run Code Online (Sandbox Code Playgroud)