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.
 
 

116 lines
3.7 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 _
from rest_framework.authtoken.models import TokenProxy
from ajaxdatatable.admin import AjaxDatatable
<<<<<<< HEAD
=======
from unfold.admin import TabularInline, StackedInline
>>>>>>> develop
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
<<<<<<< HEAD
@admin.register(StudentUser)
class StudentUserAdmin(UserAdmin, AjaxDatatable):
list_display = (
'device_id', 'email', 'fullname', 'user_type','last_login', 'date_joined',
)
=======
@admin.register(StudentUser)
class StudentUserAdmin(UserAdmin, AjaxDatatable):
list_display = (
'device_id', 'email', 'fullname', 'user_type', 'enrolled_courses_count', 'last_login', 'date_joined',
)
>>>>>>> develop
ordering = 'last_login',
readonly_fields = ('date_joined',)
exclude = ('password', 'user_permissions')
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('fullname', 'email', 'phone_number',),
<<<<<<< HEAD
# 'description': 'Please provide the student details including full name, email, and phone number.',
=======
>>>>>>> develop
}),
('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'), {
<<<<<<< HEAD
'fields': ('is_active', 'is_staff', 'is_superuser', 'groups',),
=======
'fields': ('is_active', 'groups',),
>>>>>>> develop
}),
(_('Important dates'), {'fields': ('last_login', 'date_joined', 'fcm')}),
)
@admin.display(description='Phone Number')
def _phone_number(self, obj):
return obj.phone_number
<<<<<<< HEAD
def get_queryset(self, request):
# محدود کردن نمایش فقط دانش‌آموزان
qs = super().get_queryset(request)
return qs.filter(user_type=User.UserType.STUDENT)
=======
@admin.display(description=_('Enrolled Courses'))
def enrolled_courses_count(self, obj):
"""نمایش تعداد دوره‌های شرکت کرده"""
count = obj.participated_courses.filter(is_active=True).count()
return f"{count} دوره"
def get_queryset(self, request):
# محدود کردن نمایش فقط دانش‌آموزان و بهینه‌سازی query
qs = super().get_queryset(request)
return qs.filter(user_type=User.UserType.STUDENT).prefetch_related('participated_courses')
>>>>>>> develop
def save_model(self, request, obj, form, change):
if not change:
obj.set_password(form.cleaned_data['password1'])
<<<<<<< HEAD
obj.user_type = User.UserType.STUDENT
=======
obj.add_role('student')
>>>>>>> develop
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