admin.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib import admin
  4. from polymorphic.admin import PolymorphicChildModelAdmin
  5. from .models import RadiusGroup, DSLConfiguration
  6. from coin.configuration.admin import ConfigurationAdminFormMixin
  7. from coin.utils import delete_selected
  8. class DSLConfigurationInline(admin.StackedInline):
  9. model = DSLConfiguration
  10. fields = ('offersubscription', 'phone_number', 'activated', 'radius_group', 'login', 'password')
  11. readonly_fields = ['configuration_ptr', 'login']
  12. class DSLConfigurationAdmin(ConfigurationAdminFormMixin, PolymorphicChildModelAdmin):
  13. base_model = DSLConfiguration
  14. list_display = ('offersubscription', 'activated', 'full_login',
  15. 'radius_group')
  16. list_filter = ('activated', 'radius_group')
  17. search_fields = ('login',
  18. # TODO: searching on member directly doesn't work
  19. 'offersubscription__member__first_name',
  20. 'offersubscription__member__last_name',
  21. 'offersubscription__member__email')
  22. actions = (delete_selected, "activate", "deactivate")
  23. fields = ('offersubscription', 'phone_number', 'activated', 'radius_group',
  24. 'login', 'password')
  25. inline = DSLConfigurationInline
  26. def get_readonly_fields(self, request, obj=None):
  27. if obj and obj.login != "":
  28. return ['login',]
  29. else:
  30. return []
  31. def set_activation(self, request, queryset, value):
  32. count = 0
  33. # We must update each object individually, because we want to run
  34. # the save() method to update the backend.
  35. for vpn in queryset:
  36. if vpn.activated != value:
  37. vpn.activated = value
  38. vpn.full_clean()
  39. vpn.save()
  40. count += 1
  41. action = "activated" if value else "deactivated"
  42. msg = "{} DSL line(s) {}.".format(count, action)
  43. self.message_user(request, msg)
  44. def activate(self, request, queryset):
  45. self.set_activation(request, queryset, True)
  46. activate.short_description = "Activate selected DSL lines"
  47. def deactivate(self, request, queryset):
  48. self.set_activation(request, queryset, False)
  49. deactivate.short_description = "Deactivate selected DSL lines"
  50. admin.site.register(RadiusGroup,)
  51. admin.site.register(DSLConfiguration, DSLConfigurationAdmin)