diff options
| -rw-r--r-- | example_project/settings.py | 1 | ||||
| -rw-r--r-- | example_project/urls.py | 5 | ||||
| -rw-r--r-- | ishtar_common/admin.py | 16 | ||||
| -rw-r--r-- | ishtar_common/lookups.py | 55 | ||||
| -rw-r--r-- | ishtar_common/models.py | 3 | 
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)  | 
