Аутентификация и кто и когда создал

This commit is contained in:
2025-11-01 10:26:56 +03:00
parent 78c46a2751
commit e01785fa53
44 changed files with 495 additions and 777 deletions

View File

@@ -40,10 +40,17 @@ from .filters import GeoKupDistanceFilter, GeoValidDistanceFilter, UniqueToggleF
admin.site.site_title = "Геолокация"
admin.site.site_header = "Geolocation"
admin.site.index_title = "Geo"
# Unregister default User and Group since we're customizing them
admin.site.unregister(User)
admin.site.unregister(Group)
class CustomUserInline(admin.StackedInline):
model = CustomUser
can_delete = False
verbose_name_plural = 'Дополнительная информация пользователя'
class LocationForm(forms.ModelForm):
latitude_geo = forms.FloatField(required=False, label="Широта")
longitude_geo = forms.FloatField(required=False, label="Долгота")
@@ -117,23 +124,18 @@ class GeoInline(admin.StackedInline):
)
class CustomUserInline(admin.StackedInline):
model = CustomUser
can_delete = False
verbose_name_plural = 'Дополнительная информация пользователя'
@admin.register(CustomUser)
class CustomUserAdmin(admin.ModelAdmin):
list_display = ('user', 'role')
list_filter = ('role',)
class UserAdmin(BaseUserAdmin):
inlines = [CustomUserInline]
admin.site.register(User, UserAdmin)
# @admin.register(CustomUser)
# class CustomUserAdmin(admin.ModelAdmin):
# list_display = ('user', 'role')
# list_filter = ('role',)
# raw_id_fields = ('user',) # For better performance with large number of users
@admin.register(SigmaParMark)
class SigmaParMarkAdmin(admin.ModelAdmin):
list_display = ("mark", "timestamp")
@@ -410,7 +412,6 @@ class ParameterObjItemInline(admin.StackedInline):
max_num = 1
verbose_name = "ВЧ загрузка"
verbose_name_plural = "ВЧ загрузки"
@admin.register(ObjItem)
@@ -430,6 +431,8 @@ class ObjectAdmin(admin.ModelAdmin):
"distance_geo_kup",
"distance_geo_valid",
"distance_kup_valid",
"created_at",
"updated_at",
)
list_display_links = ("name",)
list_filter = (
@@ -452,18 +455,28 @@ class ObjectAdmin(admin.ModelAdmin):
ordering = ("name",)
inlines = [ParameterObjItemInline, GeoInline]
actions = [show_on_map]
readonly_fields = ('created_at', 'created_by', 'updated_at', 'updated_by')
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('geo_obj').prefetch_related(
return qs.select_related('geo_obj', 'created_by', 'updated_by').prefetch_related(
'parameters_obj__id_satellite',
'parameters_obj__polarization',
'parameters_obj__modulation',
'parameters_obj__standard'
)
def get_readonly_fields(self, request, obj=None):
# Always make these fields readonly to preserve tracking
return self.readonly_fields
def save_model(self, request, obj, form, change):
if not change:
if not obj.created_by_id:
obj.created_by = request.user.customuser if hasattr(request.user, 'customuser') else None
obj.updated_by = request.user.customuser if hasattr(request.user, 'customuser') else None
super().save_model(request, obj, form, change)
def sat_name(self, obj):
param = next(iter(obj.parameters_obj.all()), None)
if param and param.id_satellite: