You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写Wagtail中Member模型对应的删除操作确认提示消息

Wagtail自定义Member模型删除确认提示实现

需求说明

我需要重写Wagtail管理后台的删除确认提示,新增关联删除的信息说明:当用户删除Member模型对象时,会同步删除该会员关联的所有条目,因此删除确认提示需要补充这部分说明,示例提示内容为「如果您执行删除操作,您账号下关联的5个条目也将一并丢失」。

经排查,确认提示消息来自wagtail.contrib.modeladmin.views下DeleteView类的confirmation_message方法,该方法返回的内容会渲染到Wagtail的删除操作模板中。

原Member模型代码如下:

class Member(ClusterableModel):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)
    phone = PhoneNumberField(blank=True)
    phone_2 = PhoneNumberField(blank=True)
    inside_scoop = models.TextField(blank=True)
    lifetime_member = models.BooleanField(default=False)
    activation_date = models.DateField(null=True, blank=True, default=timezone.now)
    deactivation_date = models.DateField(null=True, blank=True)
    points_balance = models.IntegerField(default=0)

    favorite_properties = models.ManyToManyField(
        PropertyPage, blank=True, related_name="favorite_properties"
    )

    base_form_class = MemberFormAdmin

    def delete(self: object, *args: list, **kwargs: dict) -> None:
        PropertyPage.objects.filter(owner=self.user).delete()
        self.user.delete()
        return super(self.__class__, self).delete(*args, **kwargs)

第一次修改(未生效)

参考建议后,我在Member模块的models.py中新增了自定义DeleteView和ModelAdmin代码:

from wagtail.contrib.modeladmin.options import ModelAdmin
from wagtail.contrib.modeladmin.views import DeleteView

class MemberDeleteView(DeleteView):
    def confirmation_message(self):
        return "Hello there!"

class MemberModelAdmin(ModelAdmin):
    model = Member
    delete_view_class = MemberDeleteView

修改后配置并未生效。

最终解决方法

自定义ModelAdmin后需要手动注册到Wagtail中才会生效,补充注册代码如下:

from wagtail.contrib.modeladmin.options import modeladmin_register
# 注册自定义的Member Model Admin
modeladmin_register(MemberModelAdmin)

如需动态展示关联条目的数量,可修改MemberDeleteView的confirmation_message方法实现:

class MemberDeleteView(DeleteView):
    def confirmation_message(self):
        member = self.get_instance()
        related_count = PropertyPage.objects.filter(owner=member.user).count()
        return f"您确定要删除该会员吗?执行删除操作后,该账号下关联的{related_count}个条目也将一并丢失。"

内容的提问来源于stack exchange,提问作者Chris Dao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:27:04