initial commit
This commit is contained in:
183
apps/users/admin.py
Normal file
183
apps/users/admin.py
Normal file
@@ -0,0 +1,183 @@
|
||||
from django.contrib import admin, messages
|
||||
from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
||||
from django.contrib.auth.forms import SetPasswordForm
|
||||
from django.shortcuts import redirect
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import reverse_lazy
|
||||
from import_export import resources
|
||||
from unfold.decorators import action as unfold_action
|
||||
|
||||
from core.admins.base import BaseAdmin, SoftDeleteListFilter
|
||||
|
||||
from apps.users.services.forms import CustomUserChangeForm, CustomUserCreationForm
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class UserResource(resources.ModelResource):
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
|
||||
@admin.register(User)
|
||||
class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
||||
model = User
|
||||
resource_class = UserResource
|
||||
form = CustomUserChangeForm
|
||||
add_form = CustomUserCreationForm
|
||||
list_display = (
|
||||
"full_name",
|
||||
"mobile",
|
||||
"is_verified",
|
||||
"is_staff",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"is_active",
|
||||
"is_deleted",
|
||||
)
|
||||
list_editable = ("mobile",)
|
||||
search_fields = (
|
||||
"first_name",
|
||||
"last_name",
|
||||
"mobile",
|
||||
"email",
|
||||
)
|
||||
list_filter = (
|
||||
SoftDeleteListFilter,
|
||||
"is_verified",
|
||||
"is_active",
|
||||
"is_staff",
|
||||
"is_superuser",
|
||||
"is_deleted",
|
||||
"created_at",
|
||||
)
|
||||
ordering = ("-created_at",)
|
||||
readonly_fields = (
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"deleted_at",
|
||||
"last_login",
|
||||
"date_joined",
|
||||
)
|
||||
date_hierarchy = "created_at"
|
||||
actions = (
|
||||
"hard_delete_selected",
|
||||
"restore_selected",
|
||||
"mark_verified",
|
||||
"mark_unverified",
|
||||
"activate_users",
|
||||
"deactivate_users",
|
||||
)
|
||||
|
||||
fieldsets = (
|
||||
(None, {"fields": ("id", "mobile", "password")}),
|
||||
(
|
||||
"Personal Info",
|
||||
{
|
||||
"fields": (
|
||||
"first_name",
|
||||
"last_name",
|
||||
"email",
|
||||
"profile_picture",
|
||||
"birth_date",
|
||||
"description",
|
||||
)
|
||||
},
|
||||
),
|
||||
(
|
||||
"Permissions",
|
||||
{
|
||||
"fields": (
|
||||
"is_verified",
|
||||
"is_active",
|
||||
"is_staff",
|
||||
"is_superuser",
|
||||
"groups",
|
||||
"user_permissions",
|
||||
)
|
||||
},
|
||||
),
|
||||
("Audit", {"fields": ("created_by", "updated_by")}),
|
||||
(
|
||||
"Important Dates",
|
||||
{
|
||||
"fields": (
|
||||
"last_login",
|
||||
"date_joined",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"deleted_at",
|
||||
"is_deleted",
|
||||
"password_updated_at",
|
||||
)
|
||||
},
|
||||
),
|
||||
)
|
||||
add_fieldsets = (
|
||||
(
|
||||
None,
|
||||
{
|
||||
"classes": ("wide",),
|
||||
"fields": (
|
||||
"mobile",
|
||||
"password1",
|
||||
"password2",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"email",
|
||||
"profile_picture",
|
||||
"is_verified",
|
||||
"is_active",
|
||||
),
|
||||
},
|
||||
),
|
||||
)
|
||||
filter_horizontal = ("groups", "user_permissions")
|
||||
|
||||
actions_row = [
|
||||
"reset_password_action",
|
||||
]
|
||||
|
||||
@unfold_action(description="Reset user password")
|
||||
def reset_password_action(self, request, object_id):
|
||||
user = User.objects.get(pk=object_id)
|
||||
form = SetPasswordForm(user=user, data=request.POST or None)
|
||||
|
||||
if request.method == "POST" and form.is_valid():
|
||||
password = form.cleaned_data["new_password1"]
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
messages.success(request, f"User '{user}' - password reset.")
|
||||
changelist_url = reverse_lazy(
|
||||
f"admin:{self.model._meta.app_label}_{self.model._meta.model_name}_changelist"
|
||||
)
|
||||
return redirect(changelist_url)
|
||||
|
||||
context = {
|
||||
**self.admin_site.each_context(request),
|
||||
"title": "Reset User Password",
|
||||
"opts": self.model._meta,
|
||||
"form": form,
|
||||
"action_name": "reset_password",
|
||||
"action_checkbox_name": ACTION_CHECKBOX_NAME,
|
||||
}
|
||||
return TemplateResponse(request, "forms/admin_reset_password.html", context)
|
||||
|
||||
@admin.action(description="Mark selected users as verified")
|
||||
def mark_verified(self, request, queryset):
|
||||
queryset.update(is_verified=True)
|
||||
|
||||
@admin.action(description="Mark selected users as unverified")
|
||||
def mark_unverified(self, request, queryset):
|
||||
queryset.update(is_verified=False)
|
||||
|
||||
@admin.action(description="Activate selected users")
|
||||
def activate_users(self, request, queryset):
|
||||
queryset.update(is_active=True)
|
||||
|
||||
@admin.action(description="Deactivate selected users")
|
||||
def deactivate_users(self, request, queryset):
|
||||
queryset.update(is_active=False)
|
||||
Reference in New Issue
Block a user