Disable add, edit and delete views and widgets for a custom Wagtail ViewSet index page
I have this Django model:
class Player(models.Model):
class Meta:
verbose_name = _("Player")
verbose_name_plural = _("Players")
first_name = models.CharField(verbose_name=_("First Name"), blank=False, null=False, max_length=255)
last_name = models.CharField(verbose_name=_("Last Name"), blank=False, null=False, max_length=255)
email = models.EmailField(verbose_name=_("Email"), blank=False, null=False, max_length=255)
uid = models.UUIDField(unique=True, blank=False, null=False, editable=False)
objects = PlayerManager()
@property
def name(self):
return f"{self.first_name} {self.last_name}"
# Add verbose name for custom property
name.fget.short_description = _("Full Name")
And this custom ViewSet to display it in the Wagtail Admin interface:
class PlayerListViewSet(ModelViewSet):
model = Player
name = "players"
add_to_settings_menu = False
add_to_admin_menu = False
list_display = (
"name",
"email",
"uid"
)
search_fields = ("first_name", "last_name", "email",)
# Disable Player CRUD
create_view_enabled = False
edit_view_enabled = False
delete_view_enabled = False
# Disable forms
exclude_form_fields = "__all__"
# Block CRUD permissions
def has_add_permission(self, request):
return False
def has_edit_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
def get_index_view_kwargs(self, **kwargs):
kwargs = super().get_index_view_kwargs(**kwargs)
kwargs["show_add_button"] = False
return kwargs
The problem is - I don't want the Player models to be created, edited or deleted via the admin interface - only a list view should be accessible. I added attributes above, but the edit/delete and add widgets are still displayed on the page. Is there a way to disable those views and widgets for a custom ViewSet?