diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-09-23 22:43:59 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-09-23 22:44:31 +0200 |
commit | d23f19fe226ffe900c5f00c3deed65de2a5a47b1 (patch) | |
tree | 36ad98bde6c927e16ddbb88380fd4e3b80e197a8 /ishtar_common/admin.py | |
parent | 4e937bb9391f719ba5073e183b5fa30db2237fd0 (diff) | |
download | Ishtar-d23f19fe226ffe900c5f00c3deed65de2a5a47b1.tar.bz2 Ishtar-d23f19fe226ffe900c5f00c3deed65de2a5a47b1.zip |
Add an action in admin for importing general types from CSV
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 77 |
1 files changed, 72 insertions, 5 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index f02a70d7a..9f8d2d809 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -20,27 +20,74 @@ """ Admin description """ +import csv -from django import forms from django.conf import settings from django.contrib import admin -from django.core.exceptions import ObjectDoesNotExist -from django.utils.translation import ugettext_lazy as _ +from django.http import HttpResponseRedirect +from django.shortcuts import render_to_response +from django.template import RequestContext +from django.template.defaultfilters import slugify + +from django import forms import models + +class ImportGenericForm(forms.Form): + _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) + csv_file = forms.FileField( + "CSV file", help_text="Only unicode encoding is managed - convert your" + " file first") + + +def gen_import_generic(self, request, queryset): + form = None + + if 'apply' in request.POST: + form = ImportGenericForm(request.POST, request.FILES) + + if form.is_valid(): + csv_file = request.FILES['csv_file'] + reader = csv.reader(csv_file) + idx = 0 + for row in reader: + slug = slugify(row[0]) + if self.model.objects.filter(txt_idx=slug).count(): + continue + obj, c = self.model.objects.get_or_create( + label=row[0], txt_idx=slug) + if c: + idx += 1 + self.message_user(request, "Successfully added %d new items." % ( + idx)) + return HttpResponseRedirect(request.get_full_path()) + if not form: + form = ImportGenericForm( + initial={'_selected_action': + request.POST.getlist(admin.ACTION_CHECKBOX_NAME)}) + return render_to_response( + 'admin/import_from_csv.html', {'csv_form': form}, + context_instance=RequestContext(request)) + +gen_import_generic.short_description = "Import from a CSV file" + + class HistorizedObjectAdmin(admin.ModelAdmin): readonly_fields = ('history_modifier',) + def save_model(self, request, obj, form, change): obj.history_modifier = request.user obj.save() + class DepartmentAdmin(admin.ModelAdmin): list_display = ('number', 'label',) model = models.Department admin.site.register(models.Department, DepartmentAdmin) + class OrganizationAdmin(HistorizedObjectAdmin): list_display = ('name', 'organization_type') list_filter = ("organization_type",) @@ -49,6 +96,7 @@ class OrganizationAdmin(HistorizedObjectAdmin): admin.site.register(models.Organization, OrganizationAdmin) + class PersonAdmin(HistorizedObjectAdmin): list_display = ('name', 'surname', 'raw_name', 'email') list_filter = ("person_types",) @@ -57,8 +105,9 @@ class PersonAdmin(HistorizedObjectAdmin): admin.site.register(models.Person, PersonAdmin) + class TownAdmin(admin.ModelAdmin): - list_display = ['name',] + list_display = ['name', ] search_fields = ['name'] if settings.COUNTRY == 'fr': list_display += ['numero_insee', 'departement', ] @@ -68,6 +117,7 @@ class TownAdmin(admin.ModelAdmin): admin.site.register(models.Town, TownAdmin) + class AuthorAdmin(admin.ModelAdmin): list_display = ['person', 'author_type'] list_filter = ("author_type",) @@ -75,61 +125,78 @@ class AuthorAdmin(admin.ModelAdmin): admin.site.register(models.Author, AuthorAdmin) + class PersonTypeAdmin(admin.ModelAdmin): model = models.PersonType filter_vertical = ('groups',) admin.site.register(models.PersonType, PersonTypeAdmin) + class GlobalVarAdmin(admin.ModelAdmin): list_display = ['slug', 'description', 'value'] admin.site.register(models.GlobalVar, GlobalVarAdmin) + class GeneralTypeAdmin(admin.ModelAdmin): list_display = ['label', 'txt_idx', 'available'] + actions = ['import_generic'] + import_generic = gen_import_generic -general_models = [models.OrganizationType, models.SourceType, models.AuthorType] + +general_models = [models.OrganizationType, models.SourceType, + models.AuthorType] for model in general_models: admin.site.register(model, GeneralTypeAdmin) + class ImporterDefaultValuesInline(admin.TabularInline): model = models.ImporterDefaultValues + class ImporterDefaultAdmin(admin.ModelAdmin): list_display = ('importer_type', 'target') model = models.ImporterDefault inlines = (ImporterDefaultValuesInline,) admin.site.register(models.ImporterDefault, ImporterDefaultAdmin) + class ImporterTypeAdmin(admin.ModelAdmin): list_display = ('name', 'associated_models', 'is_template') admin.site.register(models.ImporterType, ImporterTypeAdmin) + class RegexpAdmin(admin.ModelAdmin): list_display = ('name', 'description', "regexp") admin.site.register(models.Regexp, RegexpAdmin) + class ImporterDuplicateFieldInline(admin.TabularInline): model = models.ImporterDuplicateField + class ImportTargetInline(admin.TabularInline): model = models.ImportTarget + class ImporterColumnAdmin(admin.ModelAdmin): list_display = ('importer_type', 'col_number', 'description', 'required') list_filter = ('importer_type',) inlines = (ImporterDuplicateFieldInline, ImportTargetInline) admin.site.register(models.ImporterColumn, ImporterColumnAdmin) + class FormaterTypeAdmin(admin.ModelAdmin): list_display = ('formater_type', 'options') admin.site.register(models.FormaterType, FormaterTypeAdmin) + class ImportAdmin(admin.ModelAdmin): list_display = ('importer_type', 'imported_file', 'user', 'state', 'creation_date') admin.site.register(models.Import, ImportAdmin) + class TargetKeyAdmin(admin.ModelAdmin): list_display = ('target', 'key', 'value', 'is_set') list_filter = ("is_set",) |