0

我想覆盖删除消息(以使其更具信息性,例如“如果您删除,您将丢失 5 个属于您帐户的项目”)。

我的想法是每当有人删除我的“会员”时,它也会删除属于该会员的所有项目,并且确认消息应该提供更多信息。

我发现确认消息来自 wagtail.contrib.modeladmin.views 中 DeleteView 类中名为“confirmation_message”的函数。此函数将为 Wagtail 删除模板提供消息。

这是我的会员课:

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)

这是来自 Wagtail 的默认确认消息:位于 wagtail -> contrib -> modeladmin -> views.py 在此处输入图像描述

这就是删除模板:这在 wagtail -> contrib -> modeladmin -> templates → modeladmin → delete.html 在此处输入图像描述

这是管理员门户中给员工的消息: 在此处输入图像描述


更新 1:

在@Gasman 之后,我已经像这样更新了我的成员 models.py:

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

我将所有这些代码放入我的成员 models.py 中: 在此处输入图像描述

现在我的 models.py 看起来像这样: 在此处输入图像描述

但是,仍然无法正常工作。


更新 2:问题已解决

@Gasman 指出,在自定义 ModelAdmin 后,我们必须将其注册到 Wagtail(直到我告诉 Wagtail 使用我的自定义“MemberModelAdmin”,它才会起作用)。

这就是我将自定义模型管理员注册到 Wagtail 的方式:

from wagtail.contrib.modeladmin.options import modeladmin_register

# Now register the Member Model Admin
modeladmin_register(MemberModelAdmin)

这是我的会员 models.py: 在此处输入图像描述

这是注册自定义模型管理员后的结果: 在此处输入图像描述

非常感谢@Gasman 帮助我。

4

1 回答 1

0

根据覆盖 ModelAdmin 视图的文档,创建一个覆盖该confirmation_message方法的 DeleteView 子类:

from wagtail.contrib.modeladmin.views import DeleteView

class MemberDeleteView(DeleteView):
    def confirmation_message(self):
        sprocket_count = self.instance.sprockets.count()
        return "This member has %d sprockets. Are you sure you want to delete?" % sprocket_count

然后,在该模型的 ModelAdmin 配置中,将您的自定义子类指定为delete_view_class

class MemberModelAdmin(ModelAdmin)
    model = Member
    delete_view_class = MemberDeleteView
于 2021-09-01T12:26:55.937 回答