feat(admin): manage user social account links
This commit is contained in:
@@ -3,6 +3,7 @@ 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.db import transaction
|
||||
from django.shortcuts import redirect
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import reverse_lazy
|
||||
@@ -11,6 +12,7 @@ from unfold.decorators import action as unfold_action
|
||||
|
||||
from core.admins.base import BaseAdmin, SoftDeleteListFilter
|
||||
|
||||
from apps.users.models import UserSocialAccount
|
||||
from apps.users.services.forms import CustomUserChangeForm, CustomUserCreationForm
|
||||
|
||||
User = get_user_model()
|
||||
@@ -21,6 +23,34 @@ class UserResource(resources.ModelResource):
|
||||
model = User
|
||||
|
||||
|
||||
class UserSocialAccountInline(admin.TabularInline):
|
||||
model = UserSocialAccount
|
||||
fk_name = "user"
|
||||
extra = 0
|
||||
autocomplete_fields = ("user",)
|
||||
fields = (
|
||||
"provider",
|
||||
"provider_user_id",
|
||||
"email",
|
||||
"email_verified",
|
||||
"avatar_url",
|
||||
"is_deleted",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
)
|
||||
readonly_fields = (
|
||||
"provider",
|
||||
"provider_user_id",
|
||||
"email",
|
||||
"email_verified",
|
||||
"avatar_url",
|
||||
"is_deleted",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
)
|
||||
show_change_link = True
|
||||
|
||||
|
||||
@admin.register(User)
|
||||
class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
||||
model = User
|
||||
@@ -136,6 +166,7 @@ class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
||||
),
|
||||
)
|
||||
filter_horizontal = ("groups", "user_permissions")
|
||||
inlines = (UserSocialAccountInline,)
|
||||
|
||||
actions_row = [
|
||||
"reset_password_action",
|
||||
@@ -181,3 +212,53 @@ class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
||||
@admin.action(description="Deactivate selected users")
|
||||
def deactivate_users(self, request, queryset):
|
||||
queryset.update(is_active=False)
|
||||
|
||||
|
||||
@admin.register(UserSocialAccount)
|
||||
class UserSocialAccountAdmin(BaseAdmin):
|
||||
list_display = (
|
||||
"provider",
|
||||
"provider_user_id",
|
||||
"user",
|
||||
"email",
|
||||
"email_verified",
|
||||
"created_at",
|
||||
"is_deleted",
|
||||
)
|
||||
search_fields = (
|
||||
"provider_user_id",
|
||||
"email",
|
||||
"user__mobile",
|
||||
"user__first_name",
|
||||
"user__last_name",
|
||||
)
|
||||
list_filter = (
|
||||
SoftDeleteListFilter,
|
||||
"provider",
|
||||
"email_verified",
|
||||
"is_deleted",
|
||||
"created_at",
|
||||
)
|
||||
readonly_fields = (
|
||||
"id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"deleted_at",
|
||||
)
|
||||
autocomplete_fields = ("user",)
|
||||
actions = (
|
||||
"unlink_selected",
|
||||
"hard_delete_selected",
|
||||
"restore_selected",
|
||||
)
|
||||
|
||||
@admin.action(description="Unlink selected social accounts")
|
||||
def unlink_selected(self, request, queryset):
|
||||
count = queryset.count()
|
||||
with transaction.atomic():
|
||||
queryset.hard_delete()
|
||||
self.message_user(
|
||||
request,
|
||||
f"{count} social account link(s) permanently removed.",
|
||||
level=messages.SUCCESS,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user