diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-02 19:29:11 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-08-02 19:29:11 +0200 |
commit | 5e70cc61b723fb36e0da14abb6c8de58a18162d5 (patch) | |
tree | cf98515d86721212915cb6cb00cb41d8e3f9c574 /ishtar_common | |
parent | ba6c73260563fcc6b8a0164e55b13a3eb48e9205 (diff) | |
download | Ishtar-5e70cc61b723fb36e0da14abb6c8de58a18162d5.tar.bz2 Ishtar-5e70cc61b723fb36e0da14abb6c8de58a18162d5.zip |
Admin - ishtar common: use ajax selects for some fields - clean and simplify
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/admin.py | 16 | ||||
-rw-r--r-- | ishtar_common/lookups.py | 55 | ||||
-rw-r--r-- | ishtar_common/models.py | 3 |
3 files changed, 71 insertions, 3 deletions
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) |