summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/admin.py48
-rw-r--r--archaeological_context_records/lookups.py23
-rw-r--r--archaeological_context_records/models.py16
3 files changed, 79 insertions, 8 deletions
diff --git a/archaeological_context_records/admin.py b/archaeological_context_records/admin.py
index 9b8cae4e2..f20a9aebf 100644
--- a/archaeological_context_records/admin.py
+++ b/archaeological_context_records/admin.py
@@ -17,7 +17,15 @@
# See the file COPYING for details.
+from ajax_select import make_ajax_form
+from ajax_select.fields import AutoCompleteSelectField, \
+ AutoCompleteSelectMultipleField
+
+from django import forms
+from django.conf import settings
from django.contrib import admin
+from django.contrib.gis.forms import PointField, PolygonField, OSMWidget
+from django.utils.translation import ugettext_lazy as _
from ishtar_common.apps import admin_site
from ishtar_common.admin import HistorizedObjectAdmin, GeneralTypeAdmin
@@ -26,21 +34,38 @@ import models
class DatingAdmin(admin.ModelAdmin):
- list_display = ('period', 'start_date', 'end_date', 'dating_type',
- 'quality')
+ list_display = ('period', 'context_records_lbl', 'finds_lbl')
list_filter = ("period", 'dating_type', 'quality')
model = models.Dating
+ search_fields = ['context_records__cached_label', 'period__label',
+ 'find__cached_label']
+ readonly_fields = ['context_records_lbl', 'finds_lbl']
admin_site.register(models.Dating, DatingAdmin)
+class AdminContextRecordForm(forms.ModelForm):
+ class Meta:
+ model = models.Operation
+ exclude = []
+ point = PointField(label=_(u"Point"), required=False,
+ widget=OSMWidget)
+ polygon = PolygonField(label=_(u"Polygon"), required=False,
+ widget=OSMWidget)
+ operation = AutoCompleteSelectField('operation')
+ parcel = AutoCompleteSelectField('parcel')
+
+
class ContextRecordAdmin(HistorizedObjectAdmin):
- list_display = ('label', 'length', 'width',
- 'thickness', 'depth')
- list_filter = ('documentations',)
- search_fields = ('label', 'parcel__operation__common_name',
- 'datings__period__label')
+ list_display = ('label', 'operation', 'parcel')
+ list_filter = ('unit',)
+ search_fields = ('label', 'parcel__operation__cached_label',
+ 'parcel__section', 'parcel__parcel_number')
model = models.ContextRecord
+ form = AdminContextRecordForm
+ readonly_fields = HistorizedObjectAdmin.readonly_fields + [
+ 'imports', 'cached_label', 'datings'
+ ]
admin_site.register(models.ContextRecord, ContextRecordAdmin)
@@ -50,6 +75,10 @@ class ContextRecordSourceAdmin(admin.ModelAdmin):
list_filter = ('source_type',)
search_fields = ('title', )
model = models.ContextRecordSource
+ form = make_ajax_form(model, {
+ "context_record": 'context_record',
+ 'authors': 'author'
+ })
admin_site.register(models.ContextRecordSource, ContextRecordSourceAdmin)
@@ -57,6 +86,11 @@ admin_site.register(models.ContextRecordSource, ContextRecordSourceAdmin)
class RecordRelationsAdmin(admin.ModelAdmin):
list_display = ('left_record', 'relation_type', 'right_record')
list_filter = ('relation_type',)
+ model = models.RecordRelations
+ form = make_ajax_form(model, {
+ 'left_record': 'context_record',
+ 'right_record': 'context_record',
+ })
admin_site.register(models.RecordRelations, RecordRelationsAdmin)
diff --git a/archaeological_context_records/lookups.py b/archaeological_context_records/lookups.py
new file mode 100644
index 000000000..92115d98b
--- /dev/null
+++ b/archaeological_context_records/lookups.py
@@ -0,0 +1,23 @@
+from ajax_select import register, LookupChannel
+
+from django.db.models import Q
+
+from archaeological_context_records import models
+
+
+@register('context_record')
+class ContextRecordLookup(LookupChannel):
+ model = models.ContextRecord
+
+ def get_query(self, q, request):
+ query = Q()
+ for term in q.strip().split(' '):
+ subquery = (
+ Q(cached_label__icontains=term) |
+ Q(parcel__town__name__icontains=term)
+ )
+ query &= subquery
+ return self.model.objects.filter(query).order_by('cached_label')[:20]
+
+ def format_item_display(self, item):
+ return u"<span class='ajax-label'>%s</span>" % item.cached_label
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index ccc3268f4..243ce32f8 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -76,6 +76,20 @@ class Dating(models.Model):
return unicode(self.period)
return u"%s (%s-%s)" % (self.period, start_date, end_date)
+ def context_records_lbl(self):
+ return u" - ".join(
+ [cr.cached_label for cr in self.context_records.all()]
+ )
+ context_records_lbl.short_description = _(u"Context record")
+ context_records_lbl.admin_order_field = "context_records__cached_label"
+
+ def finds_lbl(self):
+ return u" - ".join(
+ [f.cached_label for f in self.find.all()]
+ )
+ finds_lbl.short_description = _(u"Find")
+ finds_lbl.admin_order_field = "find__cached_label"
+
@classmethod
def fix_dating_association(cls, obj):
"""
@@ -250,7 +264,7 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem, ImageModel, OwnPerms,
_(u"Location"), blank=True, null=True,
help_text=_(u"A short description of the location of the context "
u"record"))
- datings = models.ManyToManyField(Dating)
+ datings = models.ManyToManyField(Dating, related_name='context_records')
documentations = models.ManyToManyField(DocumentationType, blank=True)
datings_comment = models.TextField(_(u"Comment on datings"), blank=True,
null=True)