覆盖 Wagtail 删除确认消息
Override Wagtail delete confirmation message
我想覆盖删除消息(使其信息更丰富,例如“如果删除,您将丢失属于您帐户的 5 件商品”)。
我的想法是每当有人删除我的“会员”时,它也会删除属于该会员的所有项目,确认消息应该提供更多信息。
我发现确认消息来自 wagtail.contrib.modeladmin.views 中名为“confirmation_message”的函数,位于 DeleteView class。此函数将为 Wagtail 删除的模板提供消息。
这是我的会员class:
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 帮助我。
根据 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
我想覆盖删除消息(使其信息更丰富,例如“如果删除,您将丢失属于您帐户的 5 件商品”)。
我的想法是每当有人删除我的“会员”时,它也会删除属于该会员的所有项目,确认消息应该提供更多信息。
我发现确认消息来自 wagtail.contrib.modeladmin.views 中名为“confirmation_message”的函数,位于 DeleteView class。此函数将为 Wagtail 删除的模板提供消息。
这是我的会员class:
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 帮助我。
根据 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