消息框架:在 Wagtail 中保存页面 class 时添加消息
Message framework: Add message when saving Page class in Wagtail
所以我想检查某个字段是否已更改,如果已更改,则向用户显示一条信息消息,告知他们应该查看其他数据点。我觉得 Django 消息框架应该是这方面的理想选择,但我找不到挂钩到 wagtail 页面的位置 class 以使其工作。
现在我检查了页面的保存方法,如下所示,但我无权访问这里的请求对象,所以我不能使用 massage.add_message(因为它使用请求对象作为一个参数)。
我错过了什么?
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.pk is not None:
original = EventDetail.objects.get(pk=self.pk)
if (
original.start_date != self.start_date
and self.messages.all().count() > 0
):
messages.add_message(
request,
messages.INFO,
_(
"You have just changed starting time on an event that contains messages, please review the times for the message sends."
),
)
编辑 @gasman回复后,我的新before_edit钩子现在是这样的,可以这样吗以更pythonic的方式?与请求相比似乎有点 hack,但我看不到任何其他解决方案?
@hooks.register("before_edit_page")
def before_edit_page(request, page_object):
if isinstance(page_object, EventDetail):
if request.POST:
original = EventDetail.objects.get(pk=page_object.pk)
if (
page_object.live == True
and request.POST["start_date"]
and datetime.datetime.strptime(
request.POST["start_date"], "%Y-%m-%d %H:%M"
)
!= original.start_date
and page_object.messages.filter(sent=False).count() > 0
):
messages.add_message(
request,
messages.WARNING,
_(
"You have changed the start time of an event that has unsent messages. Please review the timing of the messages."
),
)
与其在模型的 save
方法中执行此操作,不如定义一个 after_edit_page
挂钩函数。这是在通过 Wagtail 管理员编辑页面后调用的,并允许您访问页面对象和请求。
所以我想检查某个字段是否已更改,如果已更改,则向用户显示一条信息消息,告知他们应该查看其他数据点。我觉得 Django 消息框架应该是这方面的理想选择,但我找不到挂钩到 wagtail 页面的位置 class 以使其工作。
现在我检查了页面的保存方法,如下所示,但我无权访问这里的请求对象,所以我不能使用 massage.add_message(因为它使用请求对象作为一个参数)。
我错过了什么?
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.pk is not None:
original = EventDetail.objects.get(pk=self.pk)
if (
original.start_date != self.start_date
and self.messages.all().count() > 0
):
messages.add_message(
request,
messages.INFO,
_(
"You have just changed starting time on an event that contains messages, please review the times for the message sends."
),
)
编辑 @gasman回复后,我的新before_edit钩子现在是这样的,可以这样吗以更pythonic的方式?与请求相比似乎有点 hack,但我看不到任何其他解决方案?
@hooks.register("before_edit_page")
def before_edit_page(request, page_object):
if isinstance(page_object, EventDetail):
if request.POST:
original = EventDetail.objects.get(pk=page_object.pk)
if (
page_object.live == True
and request.POST["start_date"]
and datetime.datetime.strptime(
request.POST["start_date"], "%Y-%m-%d %H:%M"
)
!= original.start_date
and page_object.messages.filter(sent=False).count() > 0
):
messages.add_message(
request,
messages.WARNING,
_(
"You have changed the start time of an event that has unsent messages. Please review the timing of the messages."
),
)
与其在模型的 save
方法中执行此操作,不如定义一个 after_edit_page
挂钩函数。这是在通过 Wagtail 管理员编辑页面后调用的,并允许您访问页面对象和请求。