from django.contrib import admin from .models import * from unfold.admin import TabularInline from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from import_export.admin import ImportExportModelAdmin from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget from django.contrib.postgres.fields import ArrayField from django.contrib.auth.models import Group from unfold.forms import AdminPasswordChangeForm from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm from utils.admin import ModelAdmin from django.template.loader import render_to_string from folium import Map, Marker from unfold.decorators import action, display from django.utils.html import format_html class UserAddressInLine(TabularInline): model = UserAddressModel extra = 0 tab = True verbose_name = 'ادرس کاربر' verbose_name_plural = 'ادرس های کاربر' @admin.register(User) class UserAdmin(BaseUserAdmin, ModelAdmin, ImportExportModelAdmin): form = UserChangeForm add_form = UserCreationForm change_password_form = AdminPasswordChangeForm filter_horizontal = [] ordering = [] inlines = [UserAddressInLine] list_filter = ['is_superuser'] search_fields = ['phone', 'first_name', 'last_name', 'email'] list_display = ['full_name_display', 'phone', 'email', 'is_superuser', 'gender', 'birth_date'] # readonly_fields = ['phone', 'email', 'otp_expiry', 'otp_hash', 'date_joined', 'profile_photo'] exclude = ('otp_hash', 'otp_expiry', 'is_active', 'is_staff', 'password', 'last_login',) import_form_class = ImportForm export_form_class = ExportForm fieldsets = ( ('اطلاعات شخصی', {'fields': ('first_name', 'last_name', 'profile_photo', 'password', 'gender', 'birth_date'),}), ('اطلاعات ارتباطی', {'fields': ('phone', 'email'),}), ('دسترسی های وبسایت', {'fields': ('is_superuser', 'video_uploader'),}), ) empty_value_display = 'ثبت نشده' add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('phone', 'password1', 'password2'), }), ) compressed_fields = True warn_unsaved_form = True formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } def full_name_display(self, obj): return obj.full_name full_name_display.short_description = 'نام و نام خانوادگی' admin.site.unregister(Group) from django.contrib import admin from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken admin.site.unregister(BlacklistedToken) admin.site.unregister(OutstandingToken) @admin.register(UserAddressModel) class AddressAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm search_fields = ['address', 'name', 'city', 'province'] list_display = ['user', 'name', 'address_display', 'postal_code', 'city', 'province', 'for_me', 'is_main'] #readonly_fields = ['user', 'name', 'address', 'postal_code', 'phone', 'city', 'province', 'for_me'] compressed_fields = True warn_unsaved_form = True formfield_overrides = { models.TextField: { "widget": WysiwygWidget, }, ArrayField: { "widget": ArrayWidget, } } def address_display(self, obj): return obj.address[0:35] + '...' address_display.short_description = 'ادرس' @admin.register(PushSubscription) class PushSubscription(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm compressed_fields = True warn_unsaved_form = True @admin.register(SecurityBreachAttemptModel) class SecurityBreachAttemptAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm compressed_fields = True warn_unsaved_form = True change_form_template = 'loction_chagne_form.html' list_display = ['ip_address', 'country', 'region_name', 'city', 'zip_code', 'isp', 'created_at', 'trys', 'display_viewd'] def change_view(self, request, object_id, form_url='', extra_context=None): extra_context = extra_context or {} obj = self.get_object(request, object_id) if obj and obj.lat and obj.lon: m = Map(location=[obj.lat, obj.lon], zoom_start=10) Marker([obj.lat, obj.lon], popup=f"Location: {obj.ip_address}").add_to(m) map_html = m._repr_html_() extra_context['map_html'] = map_html return super().change_view(request, object_id, form_url, extra_context) @display(description='دیده شده') def display_viewd(self, instance): if instance.viewd: svg = f'' else: svg = f'' return format_html( svg )