from django.contrib import admin from django.contrib.gis.admin import OSMGeoAdmin from django.contrib.gis.db.models import PointField from .models import APClass, AP, Sighting from photos.forms import GalleryForm from utils.util import get_latlon from utils.widgets import CustomSelectMultiple, LGEntryForm from .forms import SightingsForm from mapwidgets.widgets import GooglePointFieldInlineWidget class GalleryFormPlus(GalleryForm): def __init__(self, *args, **kwargs): super(GalleryFormPlus, self).__init__(*args, **kwargs) self.base_fields['seen_by'].widget = CustomSelectMultiple() class Meta: model = Sighting fields = '__all__' @admin.register(APClass) class APClassAdmin(admin.ModelAdmin): list_display = ('common_name', 'scientific_name', 'kind') list_filter = ('kind',) class SightingInline(admin.StackedInline): model = Sighting extra = 1 formfield_overrides = { PointField: {"widget": GooglePointFieldInlineWidget} } @admin.register(AP) class APAdmin(admin.ModelAdmin): form = LGEntryForm inlines = [ SightingInline, ] list_display = ('pk', 'common_name', 'scientific_name', 'kind', 'code', 'apclass') list_filter = ('apclass__kind', 'apclass') search_fields = ['common_name', 'scientific_name'] class Media: js = ('image-loader.js', 'next-prev-links.js') @admin.register(Sighting) class SightingAdmin(OSMGeoAdmin): form = SightingsForm list_filter = (('location', admin.RelatedOnlyFieldListFilter),) list_display = ('ap', 'location') # options for OSM map Using custom ESRI topo map lat, lon = get_latlon() default_lon = lon default_lat = lat default_zoom = 13 units = True scrollable = False map_width = 700 map_height = 425 map_template = 'gis/admin/osm.html' openlayers_url = '/static/admin/js/OpenLayers.js' class Media: js = ('next-prev-links.js',)