diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-04 15:31:31 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-04 15:37:23 +0200 |
commit | b35c53bbf266153e478a776209e35aad36e9cd5b (patch) | |
tree | feb7c9b7566209b175e0a6734b91692e0317b311 /archaeological_operations | |
parent | 6044b3522b2511eae088a40338115c902a9b0f82 (diff) | |
download | Ishtar-b35c53bbf266153e478a776209e35aad36e9cd5b.tar.bz2 Ishtar-b35c53bbf266153e478a776209e35aad36e9cd5b.zip |
Admin: improve parcel, parcel owner forms, add a lookup for parcel
Diffstat (limited to 'archaeological_operations')
-rw-r--r-- | archaeological_operations/admin.py | 43 | ||||
-rw-r--r-- | archaeological_operations/lookups.py | 41 | ||||
-rw-r--r-- | archaeological_operations/models.py | 10 |
3 files changed, 86 insertions, 8 deletions
diff --git a/archaeological_operations/admin.py b/archaeological_operations/admin.py index 3cfd91d5e..f1deac188 100644 --- a/archaeological_operations/admin.py +++ b/archaeological_operations/admin.py @@ -75,6 +75,13 @@ class ArchaeologicalSiteAdmin(HistorizedObjectAdmin): admin_site.register(models.ArchaeologicalSite, ArchaeologicalSiteAdmin) +class ArchaeologicalSiteInline(admin.TabularInline): + model = models.Operation.archaeological_sites.through + form = make_ajax_form( + model, {'archaeologicalsite': 'archaeological_site'}) + extra = 1 + + class AdminOperationForm(forms.ModelForm): class Meta: model = models.Operation @@ -107,6 +114,7 @@ class OperationAdmin(HistorizedObjectAdmin): readonly_fields = HistorizedObjectAdmin.readonly_fields + [ 'imports', 'cached_label'] form = AdminOperationForm + inlines = [ArchaeologicalSiteInline] admin_site.register(models.Operation, OperationAdmin) @@ -126,8 +134,18 @@ admin_site.register(models.OperationSource, OperationSourceAdmin) class ParcelAdmin(HistorizedObjectAdmin): list_display = ['section', 'parcel_number', 'operation', 'associated_file'] - search_fields = ('operation__name',) + search_fields = ('operation__cached_label', + 'associated_file__cached_label', + 'year', 'section', 'parcel_number') model = models.Parcel + form = make_ajax_form( + model, {'associated_file': 'file', + 'operation': 'operation', + 'town': 'town'} + ) + readonly_fields = HistorizedObjectAdmin.readonly_fields + [ + 'imports', 'history_date' + ] admin_site.register(models.Parcel, ParcelAdmin) @@ -165,10 +183,25 @@ class ReportStateAdmin(GeneralTypeAdmin): admin_site.register(models.ReportState, ReportStateAdmin) +class ParcelOwnerAdmin(HistorizedObjectAdmin): + list_display = ['parcel', 'operation', 'associated_file', + 'owner'] + search_fields = ('parcel__operation__cached_label', + 'parcel__associated_file__cached_label', + 'owner__name', 'owner__surname', 'parcel__section', + 'parcel__parcel_number') + model = models.ParcelOwner + form = make_ajax_form( + model, {'owner': 'person', + 'parcel': 'parcel'} + ) + readonly_fields = HistorizedObjectAdmin.readonly_fields + [ + 'imports', 'history_date' + ] + +admin_site.register(models.ParcelOwner, ParcelOwnerAdmin) + + general_models = [models.RemainType] for model in general_models: admin_site.register(model, GeneralTypeAdmin) - -basic_models = [models.ParcelOwner] -for model in basic_models: - admin_site.register(model) diff --git a/archaeological_operations/lookups.py b/archaeological_operations/lookups.py index 690b3c566..83cf6fa3a 100644 --- a/archaeological_operations/lookups.py +++ b/archaeological_operations/lookups.py @@ -1,7 +1,11 @@ from ajax_select import register, LookupChannel from django.db.models import Q -from archaeological_operations.models import Operation, ArchaeologicalSite +from django.utils.encoding import force_text +from django.utils.html import escape + +from archaeological_operations.models import Operation, ArchaeologicalSite, \ + Parcel @register('operation') @@ -33,7 +37,40 @@ class ArchaeologicalSiteLookup(LookupChannel): Q(name__icontains=term) ) query &= subquery - return self.model.objects.filter(query).order_by('cached_label')[:20] + return self.model.objects.filter(query).order_by('reference', + 'name')[:20] def format_item_display(self, item): return u"<span class='ajax-label'>%s</span>" % unicode(item) + + +@register('parcel') +class ParcelLookup(LookupChannel): + model = Parcel + + def get_query(self, q, request): + query = Q() + for term in q.strip().split(' '): + subquery = ( + Q(associated_file__cached_label__icontains=term) | + Q(operation__cached_label__icontains=term) | + Q(section__icontains=term) | + Q(parcel_number__icontains=term) | + Q(town__name__icontains=term) + ) + try: + subquery |= Q(year=int(term)) + except ValueError: + pass + query &= subquery + return self.model.objects.filter( + query).order_by('-associated_file__cached_label', + '-operation__cached_label', + 'section', + 'parcel_number')[:20] + + def format_match(self, obj): + return escape(force_text(obj.long_label())) + + def format_item_display(self, item): + return u"<span class='ajax-label'>%s</span>" % item.long_label() diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 1249fcc05..ba947e8bb 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -1473,7 +1473,15 @@ class ParcelOwner(LightHistorizedItem): verbose_name_plural = _(u"Parcel owners") def __unicode__(self): - return self.owner + settings.JOINT + self.parcel + return "{}{}{}".format(self.owner, settings.JOINT, self.parcel) + + @property + def operation(self): + return self.parcel.operation + + @property + def associated_file(self): + return self.parcel.associated_file class OperationDashboard: |