小编tom*_*eit的帖子

通过parent_page_types限制HomePage仅作为root的直接子项可用

我使用parent_page_typessubpage_types愉快各地我的页面的模型.

但我坚持class HomePage(Page)只允许我作为根级别的直接孩子.

任何提示?

wagtail

8
推荐指数
2
解决办法
912
查看次数

方法进行评论

我们有一个类似博客的网站,并且希望在我们的帖子类型中添加评论。每个帖子都是一个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)

django wagtail

7
推荐指数
1
解决办法
1420
查看次数

嵌套类别/ InlinePanel(s)witctail

我很难实现像"嵌套类别"这样的东西:

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

6
推荐指数
1
解决办法
1657
查看次数

链接到Wagtail CMS中的特定页面

在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- 如果是这样的话:如何?

wagtail

5
推荐指数
2
解决办法
2752
查看次数

保存模型和相关 m2m(组)字段后如何触发操作?

如何在 Django 用户模型保存后执行某些操作,包括对 m2m 字段的相关更改,例如django.contrib.auth.models.Group

\n\n

情况

\n\n

我有一个自定义 Django 用户模型,并且希望在用户实例(包含 m2m 组成员身份等相关更改)成功保存到数据库后触发一些操作。\n这里的用例是 Wagtail CMS,我在其中ProfilePage为每个用户实例创建 s。根据用户实例的组成员身份,我需要做一些事情。

\n\n

问题

\n\n

在自定义模型save()方法中,我无法引用更改后的组成员身份,因为 m2m 是在保存用户实例后保存的。即使在调用后运行我的自定义函数super().save(),新的组成员资格仍不可用。\n但我需要获取新的组成员身份,以便根据该用户的新组执行某些操作。

\n\n

我尝试过的

\n\n

[\xe2\x9c\x98] 自定义模型save()

\n\n
# file: users/models.py\nclass CustomUser(AbstractUser):\n    super().save(*args, **kwargs)\n    do_something()\n
Run Code Online (Sandbox Code Playgroud)\n\n

[\xe2\x9c\x98] 信号 post_save

\n\n

由于上面简单的 save() 方法没有达到目的,我尝试了post_save用户模型的信号:

\n\n
# 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()\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但即使在这里,我也总是从小组成员中获取“旧”价值观。

\n\n

[\xe2\x9c\x94] 信号:m2m_changed

\n\n

我了解到有一个m2m_changed信号可以用来监视表的变化 …

python django m2m

5
推荐指数
1
解决办法
564
查看次数

如何从 Wagtail modeladmin 的 HelpPanel 访问实例?

在 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定义中的绑定模型实例访问数据?

python modeladmin python-3.x wagtail

2
推荐指数
1
解决办法
292
查看次数

在多个应用中使用流场:迁移错误

我的鹡鸰网站项目是在不同的应用程序拆分,像coreeventpublications等等,我建立了我的streamfield中core.models

现在我想不仅core.modelsevent.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)

wagtail

1
推荐指数
1
解决办法
807
查看次数

标签 统计

wagtail ×6

django ×2

python ×2

m2m ×1

modeladmin ×1

python-3.x ×1