summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commit6e97cb35ae70db6c816599277da03faab228fa76 (patch)
tree1aa28a11a7eca859f2c0eb61de15802885b174b1
parentfe62e50c178d39dbb4c89795f25428f2830f3a03 (diff)
downloadIshtar-6e97cb35ae70db6c816599277da03faab228fa76.tar.bz2
Ishtar-6e97cb35ae70db6c816599277da03faab228fa76.zip
Geaovectordata - admin: autocomplete for geodata items
-rw-r--r--archaeological_context_records/admin.py19
-rw-r--r--archaeological_finds/admin.py25
-rw-r--r--archaeological_operations/admin.py26
-rw-r--r--ishtar_common/admin.py48
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",
+ ])
+