admin.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib import admin
  4. from coin.isp_database.models import ISPInfo, RegisteredOffice, OtherWebsite, ChatRoom, CoveredArea, BankInfo
  5. class SingleInstanceAdminMixin(object):
  6. """Hides the "Add" button when there is already an instance"""
  7. def has_add_permission(self, request):
  8. num_objects = self.model.objects.count()
  9. if num_objects >= 1:
  10. return False
  11. return super(SingleInstanceAdminMixin, self).has_add_permission(request)
  12. class RegisteredOfficeInline(admin.StackedInline):
  13. model = RegisteredOffice
  14. extra = 0
  15. fields = (('street_address', 'extended_address', 'post_office_box'),
  16. ('postal_code', 'locality'),
  17. ('region', 'country_name'))
  18. class OtherWebsiteInline(admin.StackedInline):
  19. model = OtherWebsite
  20. extra = 0
  21. class ChatRoomInline(admin.StackedInline):
  22. model = ChatRoom
  23. extra = 0
  24. class CoveredAreaInline(admin.StackedInline):
  25. model = CoveredArea
  26. extra = 0
  27. class BankInfoInline(admin.StackedInline):
  28. model = BankInfo
  29. extra = 0
  30. fieldsets = (('', {
  31. 'fields': ('iban', 'bic', 'bank_name'),
  32. 'description': (
  33. 'Les coordonnées bancaires ne font pas partie de la'+
  34. ' spécification db.ffdn.org mais sont utilisées par le'+
  35. ' site (facturation notamment).')
  36. }),)
  37. class ISPInfoAdmin(SingleInstanceAdminMixin, admin.ModelAdmin):
  38. model = ISPInfo
  39. fieldsets = (
  40. ('General', {'fields': (
  41. ('name', 'shortname'),
  42. 'description',
  43. 'logoURL',
  44. ('creationDate', 'ffdnMemberSince'),
  45. 'progressStatus',
  46. ('latitude', 'longitude'))}),
  47. ('Contact', {'fields': (
  48. ('email', 'mainMailingList'),
  49. 'website')}),
  50. ('Extras', {
  51. 'fields': ('administrative_email', 'support_email'),
  52. 'description':
  53. 'Ces champs ne font pas partie de la spécification db.ffdn.org mais sont utilisés sur le site'
  54. }),
  55. )
  56. inlines = (RegisteredOfficeInline, BankInfoInline, OtherWebsiteInline, ChatRoomInline,
  57. CoveredAreaInline)
  58. save_on_top = True
  59. admin.site.register(ISPInfo, ISPInfoAdmin)