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, NewSubCave, OtherCaveName, CaveDescription, LogbookEntry, PersonTrip, QM from troggle.core.models_survex import SurvexBlock, SurvexPersonRole, SurvexStation, ScansFolder, SurvexScanSingle 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 OtherCaveInline(admin.TabularInline): model = OtherCaveName extra = 1 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') inlines = (OtherCaveInline,) 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(NewSubCave) admin.site.register(CaveDescription) 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(SurvexScanSingle) 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)