Отмена сообщения подтверждения удаления Wagtail
Я хотел бы переопределить сообщение об удалении (сделать его более информативным, например, "если вы удалите, вы потеряете 5 предметов, принадлежащих вашей учетной записи").
Моя идея заключается в том, что каждый раз, когда кто-то удаляет моего "участника", он также удаляет все предметы, принадлежащие этому участнику, а подтверждающее сообщение должно предоставлять больше информации.
Я обнаружил, что сообщение подтверждения приходит из функции с именем "confirmation_message" в wagtail.contrib.modeladmin.views, в классе DeleteView. Эта функция предоставляет сообщение для шаблона Wagtail delete.
Это мой класс-член:
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
А это шаблон delete:
он лежит в wagtail -> contrib -> modeladmin -> templates → modeladmin → delete.html
Это сообщение для персонала на портале администратора:
Пожалуйста, помогите мне с этим делом, спасибо.
Согласно документации по переопределению представлений ModelAdmin, создайте подкласс DeleteView, переопределяющий метод confirmation_message
:
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