summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example_project/settings.py1
-rw-r--r--example_project/urls.py5
-rw-r--r--ishtar_common/admin.py16
-rw-r--r--ishtar_common/lookups.py55
-rw-r--r--ishtar_common/models.py3
5 files changed, 77 insertions, 3 deletions
diff --git a/example_project/settings.py b/example_project/settings.py
index 778a16610..d737fa29f 100644
--- a/example_project/settings.py
+++ b/example_project/settings.py
@@ -142,6 +142,7 @@ INSTALLED_APPS = [
'django.contrib.humanize',
'registration',
# 'geodjangofla',
+ 'ajax_select',
'ishtar_pdl',
'ishtar_common',
'archaeological_files_pdl',
diff --git a/example_project/urls.py b/example_project/urls.py
index 8bc2a5f31..1b8d00901 100644
--- a/example_project/urls.py
+++ b/example_project/urls.py
@@ -3,6 +3,7 @@ from django.conf.urls import patterns, include, url
from django.contrib import admin
from ishtar_common.apps import admin_site
+from ajax_select import urls as ajax_select_urls
admin.autodiscover()
@@ -32,6 +33,10 @@ urlpatterns += patterns(
'', (r'^admin/', include(admin_site.urls)),
)
+urlpatterns += patterns(
+ '', (r'^ajax-select/', include(ajax_select_urls)),
+)
+
if settings.DEBUG:
# static files (images, css, javascript, etc.)
urlpatterns += patterns(
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 494fc3ac9..897ceaa6e 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -22,6 +22,8 @@ Admin description
"""
import csv
+from ajax_select import make_ajax_form
+
from django.conf import settings
from django.contrib import admin
from django.contrib.auth.admin import GroupAdmin, UserAdmin
@@ -30,7 +32,7 @@ from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.template.defaultfilters import slugify
-from django.utils.translation import ugettext_lazy as _, ugettext
+from django.utils.translation import ugettext_lazy as _
from django import forms
@@ -115,7 +117,7 @@ def export_as_csv_action(description=_(u"Export selected as CSV file"),
class HistorizedObjectAdmin(admin.ModelAdmin):
- readonly_fields = ('history_modifier',)
+ readonly_fields = ['history_creator', 'history_modifier',]
def save_model(self, request, obj, form, change):
obj.history_modifier = request.user
@@ -152,6 +154,7 @@ 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)
@@ -162,6 +165,8 @@ 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
admin_site.register(models.Person, PersonAdmin)
@@ -174,6 +179,7 @@ class TownAdmin(admin.ModelAdmin):
list_display += ['numero_insee', 'departement', ]
search_fields += ['numero_insee', 'departement__label', ]
list_filter = ("departement",)
+ readonly_fields = ['imports']
model = models.Town
admin_site.register(models.Town, TownAdmin)
@@ -182,7 +188,10 @@ admin_site.register(models.Town, TownAdmin)
class AuthorAdmin(admin.ModelAdmin):
list_display = ['person', 'author_type']
list_filter = ("author_type",)
+ search_fields = ('person__name', 'person__surname',
+ 'person__attached_to__name')
model = models.Author
+ form = make_ajax_form(models.Author, {'person': 'person'})
admin_site.register(models.Author, AuthorAdmin)
@@ -277,6 +286,7 @@ admin_site.register(models.FormaterType, FormaterTypeAdmin)
class ImportAdmin(admin.ModelAdmin):
list_display = ('name', 'importer_type', 'imported_file', 'user', 'state',
'creation_date')
+ form = make_ajax_form(models.Import, {'user': 'ishtaruser'})
admin_site.register(models.Import, ImportAdmin)
@@ -333,7 +343,7 @@ class AdministrationTaskAdmin(admin.ModelAdmin):
admin_site.register(models.AdministrationTask, AdministrationTaskAdmin)
-basic_models = [models.DocumentTemplate, models.IshtarUser]
+basic_models = [models.DocumentTemplate]
if settings.COUNTRY == 'fr':
basic_models += [models.Arrondissement, models.Canton]
diff --git a/ishtar_common/lookups.py b/ishtar_common/lookups.py
new file mode 100644
index 000000000..a031af9b3
--- /dev/null
+++ b/ishtar_common/lookups.py
@@ -0,0 +1,55 @@
+from ajax_select import register, LookupChannel
+
+from django.db.models import Q
+from ishtar_common.models import Person, Organization, IshtarUser
+
+
+@register('organization')
+class OrganizationLookup(LookupChannel):
+ model = Organization
+
+ def get_query(self, q, request):
+ return self.model.objects.filter(
+ name__icontains=q).order_by('name')[:20]
+
+ def format_item_display(self, item):
+ return u"<span class='ajax-label'>%s</span>" % unicode(item)
+
+
+@register('person')
+class PersonLookup(LookupChannel):
+ model = Person
+
+ def get_query(self, q, request):
+ query = Q()
+ for term in q.strip().split(' '):
+ query &= (
+ Q(name__icontains=term) | Q(surname__icontains=term) |
+ Q(email__icontains=term) | Q(attached_to__name__icontains=term)|
+ Q(raw_name__icontains=term)
+ )
+ return self.model.objects.filter(query).order_by('name')[:20]
+
+ def format_item_display(self, item):
+ return u"<span class='ajax-label'>%s</span>" % unicode(item)
+
+
+@register('ishtaruser')
+class UserLookup(LookupChannel):
+ model = IshtarUser
+
+ def get_query(self, q, request):
+ query = Q()
+ for term in q.strip().split(' '):
+ query &= (
+ Q(user_ptr__username__icontains=term) |
+ Q(person__name__icontains=term) |
+ Q(person__surname__icontains=term) |
+ Q(person__email__icontains=term) |
+ Q(person__attached_to__name__icontains=term)|
+ Q(person__raw_name__icontains=term)
+ )
+ return self.model.objects.filter(query).order_by('person__name')[:20]
+
+ def format_item_display(self, item):
+ return u"<span class='ajax-label'>%s</span>" % unicode(item.person)
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 01b46b7ae..5afde8ffb 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -2956,6 +2956,9 @@ class IshtarUser(models.Model):
verbose_name = _(u"Ishtar user")
verbose_name_plural = _(u"Ishtar users")
+ def __unicode__(self):
+ return unicode(self.person)
+
@classmethod
def set_superuser(cls, user):
q = cls.objects.filter(user_ptr=user)