1
1
from django .contrib .contenttypes .admin import GenericTabularInline
2
2
from django .contrib .contenttypes .models import ContentType
3
+ from django .contrib .sites .models import Site
3
4
from ordered_model .admin import OrderedModelAdmin
4
5
from polymorphic .admin import PolymorphicInlineSupportMixin , StackedPolymorphicInline , PolymorphicParentModelAdmin , \
5
6
PolymorphicChildModelAdmin
13
14
from django .utils .functional import cached_property
14
15
from django .utils .html import mark_safe
15
16
17
+ from import_export import resources
18
+ from import_export .fields import Field
19
+ from import_export .admin import ImportExportActionModelAdmin
20
+
16
21
from mailing .admin import BaseEmailTemplateAdmin
17
22
from sponsors .models import *
18
23
from sponsors .models .benefits import RequiredAssetMixin
@@ -292,8 +297,78 @@ def choices(self, changelist):
292
297
return choices
293
298
294
299
300
+ class SponsorshipResource (resources .ModelResource ):
301
+
302
+ sponsor_name = Field (attribute = 'sponsor__name' , column_name = 'Company Name' )
303
+ contact_name = Field (column_name = 'Contact Name(s)' )
304
+ contact_email = Field (column_name = 'Contact Email(s)' )
305
+ contact_phone = Field (column_name = 'Contact phone number' )
306
+ contact_type = Field (column_name = 'Contact Type(s)' )
307
+ start_date = Field (attribute = 'start_date' , column_name = 'Start Date' )
308
+ end_date = Field (attribute = 'end_date' , column_name = 'End Date' )
309
+ web_logo = Field (column_name = 'Logo' )
310
+ landing_page_url = Field (attribute = 'sponsor__landing_page_url' , column_name = 'Webpage link' )
311
+ level = Field (attribute = 'package__name' , column_name = 'Sponsorship Level' )
312
+ cost = Field (attribute = 'sponsorship_fee' , column_name = 'Sponsorship Cost' )
313
+ admin_url = Field (attribute = 'admin_url' , column_name = 'Admin Link' )
314
+
315
+ class Meta :
316
+ model = Sponsorship
317
+ fields = (
318
+ 'sponsor_name' ,
319
+ 'contact_name' ,
320
+ 'contact_email' ,
321
+ 'contact_phone' ,
322
+ 'contact_type' ,
323
+ 'start_date' ,
324
+ 'end_date' ,
325
+ 'web_logo' ,
326
+ 'landing_page_url' ,
327
+ 'level' ,
328
+ 'cost' ,
329
+ 'admin_url' ,
330
+ )
331
+ export_order = (
332
+ "sponsor_name" ,
333
+ "contact_name" ,
334
+ "contact_email" ,
335
+ "contact_phone" ,
336
+ "contact_type" ,
337
+ "start_date" ,
338
+ "end_date" ,
339
+ "web_logo" ,
340
+ "landing_page_url" ,
341
+ "level" ,
342
+ "cost" ,
343
+ "admin_url" ,
344
+ )
345
+
346
+ def get_sponsorship_url (self , sponsorship ):
347
+ domain = Site .objects .get_current ().domain
348
+ url = reverse ("admin:sponsors_sponsorship_change" , args = [sponsorship .id ])
349
+ return f'https://{ domain } { url } '
350
+
351
+ def dehydrate_web_logo (self , sponsorship ):
352
+ return sponsorship .sponsor .web_logo .url
353
+
354
+ def dehydrate_contact_type (self , sponsorship ):
355
+ return "\n " .join ([contact .type for contact in sponsorship .sponsor .contacts .all ()])
356
+
357
+ def dehydrate_contact_name (self , sponsorship ):
358
+ return "\n " .join ([contact .name for contact in sponsorship .sponsor .contacts .all ()])
359
+
360
+ def dehydrate_contact_email (self , sponsorship ):
361
+ return "\n " .join ([contact .email for contact in sponsorship .sponsor .contacts .all ()])
362
+
363
+ def dehydrate_contact_phone (self , sponsorship ):
364
+ return "\n " .join ([contact .phone for contact in sponsorship .sponsor .contacts .all ()])
365
+
366
+ def dehydrate_admin_url (self , sponsorship ):
367
+ return self .get_sponsorship_url (sponsorship )
368
+
369
+
295
370
@admin .register (Sponsorship )
296
- class SponsorshipAdmin (admin .ModelAdmin ):
371
+ class SponsorshipAdmin (ImportExportActionModelAdmin , admin .ModelAdmin ):
297
372
change_form_template = "sponsors/admin/sponsorship_change_form.html"
298
373
form = SponsorshipReviewAdminForm
299
374
inlines = [SponsorBenefitInline , AssetsInline ]
@@ -310,6 +385,7 @@ class SponsorshipAdmin(admin.ModelAdmin):
310
385
]
311
386
list_filter = [SponsorshipStatusListFilter , "package" , "year" , TargetableEmailBenefitsFilter ]
312
387
actions = ["send_notifications" ]
388
+ resource_class = SponsorshipResource
313
389
fieldsets = [
314
390
(
315
391
"Sponsorship Data" ,
0 commit comments