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 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','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 def get_queryset(self, request): # محدود کردن نمایش فقط دانش‌آموزان qs = super().get_queryset(request) return qs.filter(user_type=User.UserType.STUDENT) def save_model(self, request, obj, form, change): if not change: obj.set_password(form.cleaned_data['password1']) obj.user_type = User.UserType.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