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 import get_user_model
|
||||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
||||||
from django.contrib.auth.forms import SetPasswordForm
|
from django.contrib.auth.forms import SetPasswordForm
|
||||||
|
from django.db import transaction
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.template.response import TemplateResponse
|
from django.template.response import TemplateResponse
|
||||||
from django.urls import reverse_lazy
|
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 core.admins.base import BaseAdmin, SoftDeleteListFilter
|
||||||
|
|
||||||
|
from apps.users.models import UserSocialAccount
|
||||||
from apps.users.services.forms import CustomUserChangeForm, CustomUserCreationForm
|
from apps.users.services.forms import CustomUserChangeForm, CustomUserCreationForm
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
@@ -21,6 +23,34 @@ class UserResource(resources.ModelResource):
|
|||||||
model = User
|
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)
|
@admin.register(User)
|
||||||
class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
||||||
model = User
|
model = User
|
||||||
@@ -136,6 +166,7 @@ class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
filter_horizontal = ("groups", "user_permissions")
|
filter_horizontal = ("groups", "user_permissions")
|
||||||
|
inlines = (UserSocialAccountInline,)
|
||||||
|
|
||||||
actions_row = [
|
actions_row = [
|
||||||
"reset_password_action",
|
"reset_password_action",
|
||||||
@@ -181,3 +212,53 @@ class CustomUserAdmin(BaseUserAdmin, BaseAdmin):
|
|||||||
@admin.action(description="Deactivate selected users")
|
@admin.action(description="Deactivate selected users")
|
||||||
def deactivate_users(self, request, queryset):
|
def deactivate_users(self, request, queryset):
|
||||||
queryset.update(is_active=False)
|
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