|
|
@ -0,0 +1,58 @@ |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 project admin site |
|
|
|
|
|
project_admin_site.register(LocationHistory, LocationHistoryAdmin) |