diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-09-28 12:34:18 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:18 +0100 |
commit | 6e97cb35ae70db6c816599277da03faab228fa76 (patch) | |
tree | 1aa28a11a7eca859f2c0eb61de15802885b174b1 | |
parent | fe62e50c178d39dbb4c89795f25428f2830f3a03 (diff) | |
download | Ishtar-6e97cb35ae70db6c816599277da03faab228fa76.tar.bz2 Ishtar-6e97cb35ae70db6c816599277da03faab228fa76.zip |
Geaovectordata - admin: autocomplete for geodata items
-rw-r--r-- | archaeological_context_records/admin.py | 19 | ||||
-rw-r--r-- | archaeological_finds/admin.py | 25 | ||||
-rw-r--r-- | archaeological_operations/admin.py | 26 | ||||
-rw-r--r-- | ishtar_common/admin.py | 48 |
4 files changed, 49 insertions, 69 deletions
diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py index 7d6d85e08..8182c1bda 100644 --- a/archaeological_context_records/admin.py +++ b/archaeological_context_records/admin.py @@ -17,13 +17,10 @@ # See the file COPYING for details. -from django import forms from django.contrib import admin -from django.contrib.gis.forms import PointField, MultiPolygonField, OSMWidget -from ishtar_common.utils import ugettext_lazy as _ from ishtar_common.apps import admin_site -from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin +from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, MainGeoDataItem from . import models @@ -43,18 +40,7 @@ class DatingAdmin(admin.ModelAdmin): admin_site.register(models.Dating, DatingAdmin) -class AdminContextRecordForm(forms.ModelForm): - class Meta: - model = models.ContextRecord - exclude = [] - - point_2d = PointField(label=_("Point"), required=False, widget=OSMWidget) - multi_polygon = MultiPolygonField( - label=_("Multi polygon"), required=False, widget=OSMWidget - ) - - -class ContextRecordAdmin(HistorizedObjectAdmin): +class ContextRecordAdmin(HistorizedObjectAdmin, MainGeoDataItem): list_display = ("label", "operation", "parcel") list_filter = ("unit",) search_fields = ( @@ -66,7 +52,6 @@ class ContextRecordAdmin(HistorizedObjectAdmin): autocomplete_fields = ["operation", "parcel", "town", "archaeological_site", "lock_user"] model = models.ContextRecord - form = AdminContextRecordForm readonly_fields = HistorizedObjectAdmin.readonly_fields + [ "cached_label", "datings", diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index f56c108d8..98c86141b 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -17,36 +17,21 @@ # See the file COPYING for details. -from django import forms from django.contrib import admin -from django.contrib.gis.forms import PointField, MultiPolygonField, \ - LineStringField, OSMWidget -from ishtar_common.utils import ugettext_lazy as _ from ishtar_common.apps import admin_site -from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin +from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, MainGeoDataItem from . import models -class AdminBaseFindForm(forms.ModelForm): - class Meta: - model = models.BaseFind - exclude = [] - point_2d = PointField(label=_("Point (2D)"), required=False, - widget=OSMWidget) - line = LineStringField(label=_("Line"), required=False, - widget=OSMWidget) - multi_polygon = MultiPolygonField(label=_("Multi polygon"), required=False, - widget=OSMWidget) - - -class BaseFindAdmin(HistorizedObjectAdmin): +class BaseFindAdmin(HistorizedObjectAdmin, MainGeoDataItem): list_display = ('label', 'context_record', 'index') search_fields = ('label', 'cache_complete_id',) + exclude = ["line"] model = models.BaseFind - form = AdminBaseFindForm - autocomplete_fields = ("context_record",) + autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + \ + MainGeoDataItem.autocomplete_fields + ["context_record"] readonly_fields = HistorizedObjectAdmin.readonly_fields + [ 'cache_short_id', 'cache_complete_id', ] diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 68264b97e..39c5ba490 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -17,15 +17,12 @@ # See the file COPYING for details. -from django import forms from django.conf import settings from django.contrib import admin -from django.contrib.gis.forms import PointField, MultiPolygonField, OSMWidget -from ishtar_common.utils import ugettext_lazy as _ from ishtar_common.apps import admin_site from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin, \ - MergeActionAdmin + MergeActionAdmin, MainGeoDataItem from . import models @@ -61,12 +58,13 @@ class OperationInline(admin.TabularInline): extra = 1 -class ArchaeologicalSiteAdmin(HistorizedObjectAdmin): +class ArchaeologicalSiteAdmin(HistorizedObjectAdmin, MainGeoDataItem): list_display = ('name', 'reference') search_fields = ('name', 'reference') model = models.ArchaeologicalSite inlines = [OperationInline] - autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + ["towns"] + autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + \ + MainGeoDataItem.autocomplete_fields + ["towns"] exclude = ["documents", "main_image"] @@ -79,17 +77,7 @@ class ArchaeologicalSiteInline(admin.TabularInline): extra = 1 -class AdminOperationForm(forms.ModelForm): - class Meta: - model = models.Operation - exclude = [] - point = PointField(label=_("Point"), required=False, - widget=OSMWidget) - multi_polygon = MultiPolygonField(label=_("Multi polygon"), required=False, - widget=OSMWidget) - - -class OperationAdmin(HistorizedObjectAdmin): +class OperationAdmin(HistorizedObjectAdmin, MainGeoDataItem): list_display = ['year', 'operation_code', 'operation_type', 'common_name'] list_filter = ("operation_type", "year",) @@ -100,7 +88,8 @@ class OperationAdmin(HistorizedObjectAdmin): model = models.Operation readonly_fields = HistorizedObjectAdmin.readonly_fields + [ 'cached_label', 'top_sites'] - autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + [ + autocomplete_fields = HistorizedObjectAdmin.autocomplete_fields + \ + MainGeoDataItem.autocomplete_fields + [ "in_charge", "scientist", "associated_file", @@ -111,7 +100,6 @@ class OperationAdmin(HistorizedObjectAdmin): "cira_rapporteur", "lock_user", ] - form = AdminOperationForm inlines = [ArchaeologicalSiteInline] exclude = ["documents", "main_image"] diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 76b585d69..cfd06bea5 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -442,7 +442,22 @@ class ChangeParentAdmin: }, ) -class HistorizedObjectAdmin(admin.ModelAdmin): + +class ImportedObjectAdmin(admin.ModelAdmin): + def get_readonly_fields(self, request, obj=None): + fields = tuple(super().get_readonly_fields(request, obj) or []) + if obj: # editing an existing object + return fields + tuple(["imports"]) + return fields + + def get_exclude(self, request, obj=None): + fields = tuple(super().get_exclude(request, obj) or []) + if not obj: + return fields + tuple(["imports"]) + return fields + + +class HistorizedObjectAdmin(ImportedObjectAdmin): readonly_fields = [ "history_creator", "history_modifier", @@ -456,16 +471,6 @@ class HistorizedObjectAdmin(admin.ModelAdmin): obj.history_modifier = request.user obj.save() - def get_readonly_fields(self, request, obj=None): - if obj: # editing an existing object - return tuple(self.readonly_fields or []) + tuple(["imports"]) - return self.readonly_fields - - def get_exclude(self, request, obj=None): - if not obj: - return tuple(self.exclude or []) + tuple(["imports"]) - return self.exclude - class MyGroupAdmin(GroupAdmin): class Media: @@ -1308,7 +1313,7 @@ class AreaAdmin(CreateDepartmentActionAdmin): search_fields = ("label", "reference") list_filter = ("parent",) model = models.Area - autocomplete_fields = ["towns"] + autocomplete_fields = ["towns", "parent"] admin_site.register(models.Area, AreaAdmin) @@ -2477,7 +2482,7 @@ class GeoVectorDataForm(forms.ModelForm): return self.cleaned_data -class GeoVectorDataAdmin(admin.ModelAdmin): +class GeoVectorDataAdmin(ImportedObjectAdmin): model = models_common.GeoVectorData search_fields = ["name"] list_display = ["name", "origin", "data_type", "provider", "source_content_type"] @@ -2485,3 +2490,20 @@ class GeoVectorDataAdmin(admin.ModelAdmin): admin_site.register(models_common.GeoVectorData, GeoVectorDataAdmin) + + +class GeoDataItem(admin.ModelAdmin): + autocomplete_fields = ["main_geodata", "geodata"] + + +class MainGeoDataItem(GeoDataItem): + def get_exclude(self, request, obj=None): + exclude = super().get_exclude(request, obj) + return tuple(exclude or []) + tuple([ + "x", "y", "z", + "estimated_error_x", "estimated_error_y", "estimated_error_z", + "spatial_reference_system", + "point", "point_2d", "point_source", "point_source_item", + "multi_polygon", "multi_polygon_source", "multi_polygon_source_item", + ]) + |