import django.forms as forms from django.contrib import admin from django.forms import ModelForm from django.http import HttpResponse from django.core import serializers from troggle.core.views.other import downloadLogbook from troggle.core.models import Person, PersonExpedition, Expedition, DataIssue from troggle.core.models_caves import Cave, Area, Entrance, CaveAndEntrance, LogbookEntry, PersonTrip, QM from troggle.core.models_survex import SurvexBlock, SurvexPersonRole, SurvexStation, ScansFolder, SingleScan class TroggleModelAdmin(admin.ModelAdmin): def save_model(self, request, obj, form, change): """overriding admin save to fill the new_since parsing_field""" obj.new_since_parsing=True obj.save() class Media: js = ('jquery/jquery.min.js','js/QM_helper.js') class RoleInline(admin.TabularInline): model = SurvexPersonRole extra = 4 class SurvexBlockAdmin(TroggleModelAdmin): inlines = (RoleInline,) class SurveyAdmin(TroggleModelAdmin): #inlines = (ScannedImageInline,) search_fields = ('expedition__year','wallet_number') class QMsFoundInline(admin.TabularInline): model=QM fk_name='found_by' fields=('number','grade','location_description','comment')#need to add foreignkey to cave part extra=1 class PersonTripInline(admin.TabularInline): model = PersonTrip raw_id_fields = ('personexpedition',) extra = 1 class LogbookEntryAdmin(TroggleModelAdmin): prepopulated_fields = {'slug':("title",)} search_fields = ('title','expedition__year') date_heirarchy = ('date') inlines = (PersonTripInline, QMsFoundInline) class Media: css = { "all": ("css/troggleadmin.css",) } actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt') def export_logbook_entries_as_html(self, modeladmin, request, queryset): response=downloadLogbook(request=request, queryset=queryset, extension='html') return response def export_logbook_entries_as_txt(self, modeladmin, request, queryset): response=downloadLogbook(request=request, queryset=queryset, extension='txt') return response class PersonExpeditionInline(admin.TabularInline): model = PersonExpedition extra = 1 class PersonAdmin(TroggleModelAdmin): search_fields = ('first_name','last_name') inlines = (PersonExpeditionInline,) class QMAdmin(TroggleModelAdmin): search_fields = ('found_by__cave__kataster_number','number','found_by__date') list_display = ('__str__','grade','found_by','ticked_off_by') list_display_links = ('__str__',) list_editable = ('found_by','ticked_off_by','grade') list_per_page = 20 raw_id_fields=('found_by','ticked_off_by') class PersonExpeditionAdmin(TroggleModelAdmin): search_fields = ('person__first_name','expedition__year') class CaveAdmin(TroggleModelAdmin): search_fields = ('official_name','kataster_number','unofficial_number') extra = 4 class EntranceAdmin(TroggleModelAdmin): search_fields = ('caveandentrance__cave__kataster_number',) admin.site.register(Cave, CaveAdmin) admin.site.register(Area) admin.site.register(CaveAndEntrance) admin.site.register(Entrance, EntranceAdmin) admin.site.register(SurvexBlock, SurvexBlockAdmin) admin.site.register(Expedition) admin.site.register(Person,PersonAdmin) admin.site.register(SurvexPersonRole) admin.site.register(PersonExpedition,PersonExpeditionAdmin) admin.site.register(LogbookEntry, LogbookEntryAdmin) admin.site.register(QM, QMAdmin) admin.site.register(SurvexStation) admin.site.register(ScansFolder) admin.site.register(SingleScan) admin.site.register(DataIssue) def export_as_json(modeladmin, request, queryset): response = HttpResponse(content_type="text/json") response['Content-Disposition'] = 'attachment; filename=troggle_output.json' serializers.serialize("json", queryset, stream=response) return response def export_as_xml(modeladmin, request, queryset): response = HttpResponse(content_type="text/xml") response['Content-Disposition'] = 'attachment; filename=troggle_output.xml' serializers.serialize("xml", queryset, stream=response) return response admin.site.add_action(export_as_xml) admin.site.add_action(export_as_json)