/jumodjango/org/admin.py

https://github.com/thatdatabaseguy/openjumo · Python · 131 lines · 108 code · 19 blank · 4 comment · 3 complexity · 15794b3b0d4d1d8e6a775c10339776c9 MD5 · raw file

  1. from django import forms
  2. from django.contrib import admin
  3. from etc import cache
  4. from entity_items.admin import MediaItemInline, ActionInline, AdvocateInline, TimelineInline, CenterContentItemInline, LeftContentItemInline
  5. from issue.models import Issue
  6. from org.models import Org, RelatedOrg, OrgIssueRelationship, Alias
  7. from users.models import User, Location
  8. from cust_admin.views.main import ExtChangeList
  9. from cust_admin.widgets import ForeignKeyToObjWidget
  10. ######## INLINES ########
  11. class AliasInline(admin.TabularInline):
  12. model = Alias
  13. extra = 0
  14. classes = ('collapse closed',)
  15. verbose_name = "Alias"
  16. verbose_name_plural = "Aliases"
  17. class AdminsInline(admin.TabularInline):
  18. model = Org.admins.through
  19. extra = 0
  20. classes = ('collapse closed',)
  21. related_field_lookups = {
  22. 'fk': ['user']
  23. }
  24. verbose_name = "Admin"
  25. verbose_name_plural = "Admins"
  26. def formfield_for_dbfield(self, db_field, **kwargs):
  27. if db_field.name == 'user':
  28. kwargs['widget'] = ForeignKeyToObjWidget(rel=Org.admins.through._meta.get_field('user').rel)
  29. return super(AdminsInline,self).formfield_for_dbfield(db_field,**kwargs)
  30. class IssuesInlineForm(forms.ModelForm):
  31. class Meta:
  32. model = Org.issues.through
  33. widgets = {'rank':forms.HiddenInput}
  34. class IssuesInline(admin.TabularInline):
  35. model = Org.issues.through
  36. extra = 0
  37. form = IssuesInlineForm
  38. classes = ('collapse closed',)
  39. sortable_field_name = "rank"
  40. related_field_lookups = {
  41. 'fk': ['issue']
  42. }
  43. verbose_name = ""
  44. verbose_name_plural = "Working On"
  45. def formfield_for_dbfield(self, db_field, **kwargs):
  46. if db_field.name == 'issue':
  47. kwargs['widget'] = ForeignKeyToObjWidget(rel=Org.issues.through._meta.get_field('issue').rel)
  48. return super(IssuesInline,self).formfield_for_dbfield(db_field,**kwargs)
  49. class LocationsInline(admin.TabularInline):
  50. model = Org.working_locations.through
  51. extra = 0
  52. classes = ('collapse closed',)
  53. related_field_lookups = {
  54. 'fk': ['location']
  55. }
  56. verbose_name = ''
  57. verbose_name_plural = 'Working In'
  58. def formfield_for_dbfield(self, db_field, **kwargs):
  59. if db_field.name == 'location':
  60. kwargs['widget'] = ForeignKeyToObjWidget(rel=Org.working_locations.through._meta.get_field('location').rel)
  61. return super(LocationsInline,self).formfield_for_dbfield(db_field,**kwargs)
  62. ######## MODEL FORM AND ADMIN ########
  63. class OrgForm(forms.ModelForm):
  64. class Meta:
  65. model = Org
  66. widgets = {
  67. 'location': ForeignKeyToObjWidget(rel=Org._meta.get_field('location').rel),
  68. 'facebook_id' : forms.TextInput(attrs={'class':'vTextField'}),
  69. 'summary': forms.Textarea(),
  70. }
  71. class Media:
  72. js = ['cust_admin/js/widgets.js']
  73. css = {'all':('cust_admin/css/extend_admin.css',)}
  74. class OrgAdmin(admin.ModelAdmin):
  75. form = OrgForm
  76. #Org List Page Values
  77. search_fields = ['name','email', 'handle']
  78. search_fields_verbose = ['Name', 'Email']
  79. list_display = ('name', 'date_updated','is_active', 'is_vetted')
  80. list_filter = ('is_active',)
  81. ordering = ('name',)
  82. change_list_template = "cust_admin/change_list.html"
  83. def get_changelist(self, request, **kwargs):
  84. return ExtChangeList
  85. #Org Change Page Values
  86. fieldsets = (
  87. ('Org Profile', {
  88. 'fields': (('name','handle',),
  89. ('is_active', 'is_vetted', 'donation_enabled','is_claimed'),
  90. ('email', 'ein',),
  91. ('phone_number','year_founded','revenue','size',),
  92. ('site_url', 'blog_url',),
  93. 'img_small_url', 'img_large_url','summary','location',
  94. ('date_created','date_updated',),)
  95. }),
  96. ('Social Settings', {
  97. 'fields':(
  98. ('facebook_id', 'twitter_id', ),
  99. ('youtube_id', 'flickr_id',),
  100. )
  101. }),
  102. ("Extra Nonsense", {
  103. 'classes': ('collapse closed',),
  104. 'fields':('claim_token',),
  105. }),
  106. )
  107. readonly_fields = ['date_created','date_updated']
  108. inlines = [CenterContentItemInline, LeftContentItemInline, MediaItemInline, TimelineInline, ActionInline, AdvocateInline, AliasInline, AdminsInline, IssuesInline, LocationsInline, ]
  109. def save_model(self, request, obj, form, change):
  110. cache.bust(obj, update=False)
  111. super(self.__class__, self).save_model(request, obj, form, change)
  112. admin.site.register(Org,OrgAdmin)