# coding: utf-8 from django.contrib import admin from gestioncof.models import Survey, SurveyQuestion, SurveyQuestionAnswer from gestioncof.models import Event, EventOption, EventOptionChoice from django.core.urlresolvers import reverse from django.utils.safestring import mark_safe def add_link_field(target_model = '', field = '', link_text = unicode, desc_text = unicode): def add_link(cls): reverse_name = target_model or cls.model.__name__.lower() def link(self, instance): app_name = instance._meta.app_label reverse_path = "admin:%s_%s_change" % (app_name, reverse_name) link_obj = getattr(instance, field, None) or instance if not link_obj.id: return "" url = reverse(reverse_path, args = (link_obj.id,)) return mark_safe("%s" % (url, link_text(link_obj))) link.allow_tags = True link.short_description = desc_text(reverse_name + ' link') cls.link = link cls.readonly_fields = list(getattr(cls, 'readonly_fields', [])) + ['link'] return cls return add_link class SurveyQuestionAnswerInline(admin.TabularInline): model = SurveyQuestionAnswer @add_link_field(desc_text = lambda x: "Réponses", link_text = lambda x: "Éditer les réponses") class SurveyQuestionInline(admin.TabularInline): model = SurveyQuestion class SurveyQuestionAdmin(admin.ModelAdmin): inlines = [ SurveyQuestionAnswerInline, ] class SurveyAdmin(admin.ModelAdmin): inlines = [ SurveyQuestionInline, ] @add_link_field() class EventOptionChoiceInline(admin.StackedInline): model = EventOptionChoice @add_link_field() class EventOptionInline(admin.StackedInline): model = EventOption class EventOptionAdmin(admin.ModelAdmin): inlines = [ EventOptionChoiceInline, ] class EventAdmin(admin.ModelAdmin): inlines = [ EventOptionInline, ] admin.site.register(Survey, SurveyAdmin) admin.site.register(SurveyQuestion, SurveyQuestionAdmin) admin.site.register(Event, EventAdmin) admin.site.register(EventOption, EventOptionAdmin)