admin.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. )
  51. inlines = (RegisteredOfficeInline, BankInfoInline, OtherWebsiteInline, ChatRoomInline,
  52. CoveredAreaInline)
  53. save_on_top = True
  54. admin.site.register(ISPInfo, ISPInfoAdmin)