diff options
-rw-r--r-- | archaeological_context_records/admin.py | 2 | ||||
-rw-r--r-- | archaeological_files/admin.py | 4 | ||||
-rw-r--r-- | archaeological_finds/admin.py | 9 | ||||
-rw-r--r-- | archaeological_operations/admin.py | 9 | ||||
-rw-r--r-- | archaeological_warehouse/admin.py | 7 | ||||
-rw-r--r-- | ishtar_common/admin.py | 18 | ||||
-rw-r--r-- | ishtar_common/tests.py | 36 |
7 files changed, 60 insertions, 25 deletions
diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py index 2733fa2ff..d5e4d09b9 100644 --- a/archaeological_context_records/admin.py +++ b/archaeological_context_records/admin.py @@ -62,7 +62,7 @@ class ContextRecordAdmin(HistorizedObjectAdmin): model = models.ContextRecord form = AdminContextRecordForm readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'cached_label', 'datings' + 'cached_label', 'datings' ] admin_site.register(models.ContextRecord, ContextRecordAdmin) diff --git a/archaeological_files/admin.py b/archaeological_files/admin.py index 525f7e840..4dca1afa9 100644 --- a/archaeological_files/admin.py +++ b/archaeological_files/admin.py @@ -48,13 +48,15 @@ class FileAdmin(HistorizedObjectAdmin): 'related_file': 'file' }) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'raw_general_contractor', 'raw_town_planning_service', 'imports', + 'raw_general_contractor', 'raw_town_planning_service', 'cached_label', 'imported_line' ] model = models.File + admin_site.register(models.File, FileAdmin) + general_models = [models.FileType, models.PermitType] if settings.COUNTRY == 'fr': general_models.append(models.SaisineType) diff --git a/archaeological_finds/admin.py b/archaeological_finds/admin.py index 6b925e41c..6f32365b9 100644 --- a/archaeological_finds/admin.py +++ b/archaeological_finds/admin.py @@ -51,7 +51,7 @@ class BaseFindAdmin(HistorizedObjectAdmin): model = models.BaseFind form = AdminBaseFindForm readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'cache_short_id', 'cache_complete_id', 'imports' + 'cache_short_id', 'cache_complete_id', ] admin_site.register(models.BaseFind, BaseFindAdmin) @@ -69,7 +69,7 @@ class FindAdmin(HistorizedObjectAdmin): 'container': 'container' }) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'datings', 'cached_label' + 'datings', 'cached_label' ] admin_site.register(models.Find, FindAdmin) @@ -97,7 +97,7 @@ class PropertyAdmin(HistorizedObjectAdmin): 'person': 'person', }) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'administrative_act', 'imports', ] + 'administrative_act'] def has_add_permission(self, request): return False @@ -118,7 +118,7 @@ class TreatmentAdmin(HistorizedObjectAdmin): 'container': 'container', }) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'cached_label', 'downstream_lbl', 'upstream_lbl' + 'cached_label', 'downstream_lbl', 'upstream_lbl' ] def has_add_permission(self, request): @@ -140,7 +140,6 @@ class TreatmentFileAdmin(HistorizedObjectAdmin): 'applicant': 'person', 'applicant_organisation': 'organization', }) - exclude = ['imports'] readonly_fields = HistorizedObjectAdmin.readonly_fields + [ 'cached_label', ] diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index f1deac188..bf1415989 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -40,7 +40,7 @@ class AdministrativeActAdmin(HistorizedObjectAdmin): search_fields = ('year', 'index') readonly_fields = HistorizedObjectAdmin.readonly_fields + [ 'in_charge', 'operator', 'scientist', 'signatory', 'associated_file', - 'imports', 'departments_label', 'towns_label'] + 'departments_label', 'towns_label'] model = models.AdministrativeAct form = make_ajax_form( models.AdministrativeAct, {'operation': 'operation'} @@ -69,7 +69,6 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin): list_display = ('name', 'reference') search_fields = ('name', 'reference') model = models.ArchaeologicalSite - readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports'] inlines = [OperationInline] admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin) @@ -112,7 +111,7 @@ class OperationAdmin(HistorizedObjectAdmin): search_fields += ['code_patriarche'] model = models.Operation readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'cached_label'] + 'cached_label'] form = AdminOperationForm inlines = [ArchaeologicalSiteInline] @@ -144,7 +143,7 @@ class ParcelAdmin(HistorizedObjectAdmin): 'town': 'town'} ) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'history_date' + 'history_date' ] admin_site.register(models.Parcel, ParcelAdmin) @@ -196,7 +195,7 @@ class ParcelOwnerAdmin(HistorizedObjectAdmin): 'parcel': 'parcel'} ) readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'history_date' + 'history_date' ] admin_site.register(models.ParcelOwner, ParcelOwnerAdmin) diff --git a/archaeological_warehouse/admin.py b/archaeological_warehouse/admin.py index deaffde94..f2b44fcf0 100644 --- a/archaeological_warehouse/admin.py +++ b/archaeological_warehouse/admin.py @@ -36,9 +36,7 @@ class WarehouseAdmin(HistorizedObjectAdmin): 'town': 'town', 'person_in_charge': 'person' }) - readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports' - ] + admin_site.register(models.Warehouse, WarehouseAdmin) @@ -48,6 +46,7 @@ class ContainerTypeAdmin(admin.ModelAdmin): 'volume') model = models.ContainerType + admin_site.register(models.ContainerType, ContainerTypeAdmin) @@ -56,7 +55,7 @@ class ContainerAdmin(HistorizedObjectAdmin): list_filter = ("container_type",) model = models.Container readonly_fields = HistorizedObjectAdmin.readonly_fields + [ - 'imports', 'history_date' + 'history_date' ] form = make_ajax_form(model, { 'location': 'warehouse', diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 7cb02e1b3..2df910ffd 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -123,6 +123,16 @@ 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: @@ -156,7 +166,6 @@ class OrganizationAdmin(HistorizedObjectAdmin): list_filter = ("organization_type",) search_fields = ('name',) exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', ) - readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports'] model = models.Organization admin_site.register(models.Organization, OrganizationAdmin) @@ -167,7 +176,6 @@ class PersonAdmin(HistorizedObjectAdmin): list_filter = ("person_types",) search_fields = ('name', 'surname', 'email', 'raw_name') exclude = ('merge_key', 'merge_exclusion', 'merge_candidate', ) - readonly_fields = HistorizedObjectAdmin.readonly_fields + ['imports'] form = make_ajax_form(models.Person, {'attached_to': 'organization'}) model = models.Person @@ -185,7 +193,7 @@ class AdminRelatedTownForm(forms.ModelForm): class AdminTownForm(forms.ModelForm): class Meta: model = models.Town - exclude = [] + exclude = ['imports'] center = PointField(label=_(u"center"), required=False, widget=OSMWidget) children = AutoCompleteSelectMultipleField('town', required=False, @@ -202,14 +210,14 @@ class TownParentInline(admin.TabularInline): class TownAdmin(admin.ModelAdmin): + model = models.Town list_display = ['name', ] search_fields = ['name'] + readonly_fields = ['cached_label'] if settings.COUNTRY == 'fr': list_display += ['numero_insee', 'departement', ] search_fields += ['numero_insee', 'departement__label', ] list_filter = ("departement",) - readonly_fields = ['cached_label', 'imports'] - model = models.Town form = AdminTownForm inlines = [TownParentInline] diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 8a951b29a..bbb449fe3 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -23,6 +23,8 @@ import os import shutil from StringIO import StringIO +from django.apps import apps + from django.conf import settings from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType @@ -38,6 +40,7 @@ from django.test.runner import DiscoverRunner from ishtar_common import models from ishtar_common import views +from ishtar_common.apps import admin_site from ishtar_common.utils import post_save_point @@ -347,6 +350,13 @@ class AdminGenTypeTest(TestCase): models_with_data = gen_models + [models.ImporterModel] models = models_with_data module_name = 'ishtar_common' + ishtar_apps = [ + 'ishtar_common', 'archaeological_files', 'archaeological_operations', + 'archaeological_context_records', 'archaeological_warehouse', + 'archaeological_finds' + ] + readonly_models = ['archaeological_finds.Property', + 'archaeological_finds.Treatment'] def setUp(self): self.password = 'mypassword' @@ -359,16 +369,34 @@ class AdminGenTypeTest(TestCase): self.client.login(username=self.username, password=self.password) def test_listing_and_detail(self): - for model in self.models: + models = [] + for app in self.ishtar_apps: + app_models = apps.get_app_config(app).get_models() + for model in app_models: + if model in admin_site._registry: + models.append((app, model)) + for app, model in models: # quick test to verify basic access to listing - base_url = '/admin/{}/{}/'.format(self.module_name, - model.__name__.lower()) + base_url = '/admin/{}/{}/'.format(app, model.__name__.lower()) url = base_url response = self.client.get(url) self.assertEqual( response.status_code, 200, msg="Can not access admin list for {}.".format(model)) - if model in self.models_with_data: + nb = model.objects.count() + url = base_url + "add/" + response = self.client.get(url) + if app + "." + model.__name__ in self.readonly_models: + continue + self.assertEqual( + response.status_code, 200, + msg="Can not access admin add page for {}.".format(model)) + self.assertEqual( + nb, model.objects.count(), + msg="A ghost object have been created on access to add page " + "for {}.".format(model)) + + if nb: url = base_url + "{}/change/".format(model.objects.all()[0].pk) response = self.client.get(url) self.assertEqual( |