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.
59 lines
2.0 KiB
59 lines
2.0 KiB
from django.contrib import admin
|
|
from django.utils.translation import gettext_lazy as _
|
|
from unfold.admin import ModelAdmin, TabularInline
|
|
from unfold.decorators import display
|
|
from unfold.contrib.filters.admin import (
|
|
RangeDateTimeFilter,
|
|
TextFilter,
|
|
AutocompleteSelectFilter,
|
|
)
|
|
|
|
from apps.account.models import LocationHistory, User
|
|
from utils.admin import project_admin_site, dovoodi_admin_site
|
|
|
|
|
|
class LocationHistoryInline(TabularInline):
|
|
model = LocationHistory
|
|
extra = 0
|
|
tab = True
|
|
fields = ('lat', 'lon', 'country', 'city', 'selected_manually', 'ip', 'timezone', 'at_time')
|
|
readonly_fields = ('lat', 'lon', 'country', 'city', 'selected_manually', 'ip', 'timezone', 'at_time',)
|
|
verbose_name = _("Location History")
|
|
verbose_name_plural = _("Location History")
|
|
can_delete = False
|
|
show_change_link = True
|
|
|
|
|
|
class LocationHistoryAdmin(ModelAdmin):
|
|
list_display = ('user', 'display_location', 'country', 'city', 'selected_manually', 'ip', 'display_at_time')
|
|
list_filter = [
|
|
('user', AutocompleteSelectFilter),
|
|
'country',
|
|
'city',
|
|
'selected_manually',
|
|
('at_time', RangeDateTimeFilter),
|
|
]
|
|
search_fields = ('user__email', 'user__fullname', 'country', 'city', 'ip')
|
|
readonly_fields = ('at_time',)
|
|
fieldsets = (
|
|
(None, {
|
|
'fields': ('user', ('lat', 'lon'), ('country', 'city'))
|
|
}),
|
|
(_('Additional Information'), {
|
|
'fields': ('selected_manually', 'ip', 'timezone', 'at_time'),
|
|
'classes': ('tab',),
|
|
}),
|
|
)
|
|
|
|
@display(description=_("Location"))
|
|
def display_location(self, instance: LocationHistory):
|
|
return f"{instance.lat}, {instance.lon}"
|
|
|
|
@display(description=_("Date & Time"))
|
|
def display_at_time(self, instance: LocationHistory):
|
|
return instance.at_time.strftime("%Y-%m-%d %H:%M") if instance.at_time else "-"
|
|
|
|
|
|
# Register with both admin sites
|
|
project_admin_site.register(LocationHistory, LocationHistoryAdmin)
|
|
dovoodi_admin_site.register(LocationHistory, LocationHistoryAdmin)
|