You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

82 lines
2.9 KiB

from django.contrib import admin
from django.contrib.auth.forms import UserChangeForm, UsernameField
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _, ngettext
from rest_framework.authtoken.models import TokenProxy
from ajaxdatatable.admin import AjaxDatatable
from unfold.admin import TabularInline, StackedInline
from django.contrib import admin
from apps.account.models import User
from django import forms
from django.contrib import admin
from django.urls import path, reverse
from django.shortcuts import render, redirect
from django.contrib import messages
from apps.account.models import StudentUser, User
@admin.register(StudentUser)
class StudentUserAdmin(UserAdmin, AjaxDatatable):
list_display = (
'device_id', 'email', 'fullname', 'user_type', 'enrolled_courses_count', 'last_login', 'date_joined',
)
ordering = 'last_login',
readonly_fields = ('date_joined',)
exclude = ('password', 'user_permissions')
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('fullname', 'email', 'phone_number',),
}),
(_('other'), {
'classes': ('wide',),
'fields': ('avatar', 'info'),
}),
(_('Password'), {
'classes': ('wide',),
'fields': ('password1', 'password2'),
}),
)
search_fields = (
'email', 'fullname', 'username',
)
fieldsets = (
(_('Personal info'), {'fields': ('fullname', 'email', 'phone_number', 'avatar',)}),
(_('Permissions'), {
'fields': ('is_active', 'groups',),
}),
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'fcm')}),
)
@admin.display(description=_('Phone Number'))
def _phone_number(self, obj):
return obj.phone_number
@admin.display(description=_('Enrolled Courses'))
def enrolled_courses_count(self, obj):
"""نمایش تعداد دوره‌های شرکت کرده"""
count = obj.participated_courses.filter(is_active=True).count()
return ngettext("{count} course", "{count} courses", count).format(count=count)
def get_queryset(self, request):
# محدود کردن نمایش فقط دانش‌آموزان و بهینه‌سازی query
qs = super().get_queryset(request)
return qs.filter(user_type=User.UserType.STUDENT).prefetch_related('participated_courses')
def save_model(self, request, obj, form, change):
if not change:
obj.set_password(form.cleaned_data['password1'])
obj.add_role('student')
super().save_model(request, obj, form, change)
def has_add_permission(self, request):
if '_popup' in request.GET and request.GET['_popup'] == '1': # بررسی وجود _popup در پارامترهای GET
return True
return False
def has_delete_permission(self, request, obj=None):
return False