Enable member editing functionality: implement MemberEditView, update routes, modify templates for dynamic filtering and superuser badges, and standardize contact info handling.
This commit is contained in:
@@ -5,15 +5,17 @@ from django.contrib.messages.views import SuccessMessageMixin
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DeleteView, UpdateView, CreateView
|
||||
from django.views.generic import CreateView, DeleteView, UpdateView
|
||||
from django_filters.views import FilterView
|
||||
from rules.contrib.views import PermissionRequiredMixin
|
||||
|
||||
from members.filters import MemberFilter
|
||||
from members.models import Member
|
||||
from members.forms import MemberForm
|
||||
from members.models import Member
|
||||
|
||||
from ..mixins import HTMXViewMixin
|
||||
|
||||
|
||||
class MemberListView(HTMXViewMixin, PermissionRequiredMixin, FilterView):
|
||||
filterset_class = MemberFilter
|
||||
paginate_by = 50
|
||||
@@ -25,15 +27,15 @@ class MemberListView(HTMXViewMixin, PermissionRequiredMixin, FilterView):
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
return HttpResponseRedirect(reverse_lazy("backend:index"))
|
||||
|
||||
|
||||
def get_filterset_kwargs(self, filterset_class) -> dict[str, Any]:
|
||||
kwargs = super().get_filterset_kwargs(filterset_class)
|
||||
|
||||
|
||||
filter_values = {} if kwargs["data"] is None else kwargs["data"].dict()
|
||||
|
||||
|
||||
if not filter_values:
|
||||
filter_values.update({"user__is_active": "true"})
|
||||
|
||||
|
||||
kwargs["data"] = filter_values
|
||||
return kwargs
|
||||
|
||||
@@ -47,11 +49,11 @@ class MemberAddView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin,
|
||||
success_url = reverse_lazy("backend:members:list")
|
||||
partial_name = "members/member_form.html#content"
|
||||
menu_highlight = "members"
|
||||
|
||||
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
return HttpResponseRedirect(reverse_lazy("backend:index"))
|
||||
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name())
|
||||
|
||||
@@ -65,14 +67,22 @@ class MemberEditView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin
|
||||
success_url = reverse_lazy("backend:members:list")
|
||||
partial_name = "members/member_form.html#content"
|
||||
menu_highlight = "members"
|
||||
|
||||
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
return HttpResponseRedirect(reverse_lazy("backend:index"))
|
||||
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name())
|
||||
|
||||
def get_initial(self):
|
||||
initial = super().get_initial()
|
||||
user = self.get_object().user
|
||||
|
||||
initial.update({"first_name": user.first_name, "last_name": user.last_name, "email": user.email, "admin": user.is_superuser})
|
||||
|
||||
return initial
|
||||
|
||||
|
||||
class MemberDeleteView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMixin, DeleteView):
|
||||
model = Member
|
||||
@@ -82,21 +92,21 @@ class MemberDeleteView(HTMXViewMixin, PermissionRequiredMixin, SuccessMessageMix
|
||||
success_url = reverse_lazy("backend:members:list")
|
||||
partial_name = "members/member_confirm_delete.html#content"
|
||||
menu_highlight = "members"
|
||||
|
||||
|
||||
def handle_no_permission(self) -> HttpResponseRedirect:
|
||||
messages.error(self.request, self.get_permission_denied_message())
|
||||
return HttpResponseRedirect(reverse_lazy("backend:index"))
|
||||
|
||||
|
||||
def get_success_message(self, cleaned_data):
|
||||
return self.success_message % dict(cleaned_data, name=self.object.user.get_full_name())
|
||||
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
|
||||
|
||||
# Soft delete user
|
||||
self.object.user.is_active = False
|
||||
self.object.user.save()
|
||||
|
||||
|
||||
# Do not delete the member object
|
||||
messages.success(self.request, self.get_success_message({"name": self.object.user.get_full_name()}))
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
|
||||
Reference in New Issue
Block a user