admin.py 2.0 KB

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