【问题标题】:Override Wagtail delete confirmation message覆盖 Wagtail 删除确认消息
【发布时间】:2021-09-01 10:59:25
【问题描述】:

我想覆盖删除消息(以使其更具信息性,例如“如果您删除,您将丢失 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 -> 模板 → 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 帮助我。

【问题讨论】:

    标签: python django wagtail wagtail-admin


    【解决方案1】:

    根据overriding ModelAdmin views 上的文档,创建一个覆盖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
    

    【讨论】:

    • 嗨@gasman,感谢您的帮助,但消息仍未更改。我已经完全按照您的建议进行了尝试。在我的 Member model.py 中,我定义了 2 个类“MemberDeleteView”和“MemberModelAdmin”,就像您提供的示例一样,但事情没有改变。
    • 好的,那么请更新问题以包含所有相关代码。
    • 我已经更新了所有相关代码,请看一下。谢谢。
    • 你在任何时候都用你的 MemberModelAdmin 类调用modeladmin_register 吗?
    • 哇哦,我想我明白了,我还没有在任何地方注册MemberModelAdmin
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多