admin.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # -*- coding: utf-8 -*-
  2. from django.contrib import admin
  3. from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin
  4. from coin.resources.models import IPSubnet
  5. from coin.configuration.models import Configuration
  6. from coin.configuration.forms import ConfigurationForm
  7. """
  8. Implementation note : When creating child admin class, you have to inherit
  9. ConfigurationAdminFormMixin. This make use of ConfigurationForm form that
  10. filter offersubscription select input to avoid selecting wrong subscription.
  11. """
  12. class IPSubnetInline(admin.TabularInline):
  13. model = IPSubnet
  14. extra = 0
  15. class ParentConfigurationAdmin(PolymorphicParentModelAdmin):
  16. base_model = Configuration
  17. polymorphic_list = True
  18. list_display = ('model_name','configuration_type_name', 'offersubscription', 'offer_subscription_member')
  19. def offer_subscription_member(self, config):
  20. return config.offersubscription.member
  21. offer_subscription_member.short_description = 'Membre'
  22. def get_child_models(self):
  23. """
  24. Renvoi la liste des modèles enfants de Configuration
  25. ex :((VPNConfiguration, VPNConfigurationAdmin),
  26. (ADSLConfiguration, ADSLConfigurationAdmin))
  27. """
  28. return (tuple((x.base_model, x) for x in PolymorphicChildModelAdmin.__subclasses__()))
  29. def get_urls(self):
  30. """
  31. Fix a django-polymorphic bug that randomly set wrong url for a child
  32. model in admin.
  33. This remove somes dummy urls that have not to be returned by the parent model
  34. https://github.com/chrisglass/django_polymorphic/issues/105
  35. """
  36. urls = super(ParentConfigurationAdmin, self).get_urls()
  37. for model, _ in self.get_child_models():
  38. admin = self._get_real_admin_by_model(model)
  39. for admin_url in admin.get_urls():
  40. for url in urls:
  41. if url.name == admin_url.name:
  42. urls.remove(url)
  43. return urls
  44. class ConfigurationAdminFormMixin(object):
  45. base_form = ConfigurationForm
  46. admin.site.register(Configuration, ParentConfigurationAdmin)