我想覆盖删除消息(以使其更具信息性,例如“如果您删除,您将丢失 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
但是,仍然无法正常工作。
更新 2:问题已解决
@Gasman 指出,在自定义 ModelAdmin 后,我们必须将其注册到 Wagtail(直到我告诉 Wagtail 使用我的自定义“MemberModelAdmin”,它才会起作用)。
这就是我将自定义模型管理员注册到 Wagtail 的方式:
from wagtail.contrib.modeladmin.options import modeladmin_register
# Now register the Member Model Admin
modeladmin_register(MemberModelAdmin)
非常感谢@Gasman 帮助我。