Skip to content

Commit

Permalink
Export CSV for proposal Model in the Admin Panel (pythonindia#787)
Browse files Browse the repository at this point in the history
* Export CSV for proposal

* removed spaces

* removed spaces
  • Loading branch information
cricketkid authored Oct 9, 2023
1 parent 208d175 commit b3a113f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ var/
*.egg-info/
.installed.cfg
*.egg
.idea/*

# PyInstaller
# Usually these files are written by a python script from a template
Expand Down
39 changes: 32 additions & 7 deletions junction/proposals/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,32 @@
from junction.conferences import service
from junction.conferences.models import ConferenceProposalReviewer
from junction.proposals.models import ProposalSection
from junction.base.constants import ProposalStatus, ProposalReviewStatus

from django.http import HttpResponse
from . import models


class ExportMixin:
def export_as_csv(self, request, queryset):
import csv

response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="exported_data.csv"'

writer = csv.writer(response)
writer.writerow(['Proposal Info', 'Author Info', 'Author Email', 'Conference', 'Status', 'Review Status'])

for item in queryset:
writer.writerow([self.proposal_info(item), self.author_info(item), self.author_email(item),
item.conference.name, dict(ProposalStatus.CHOICES).get(item.status),
dict(ProposalReviewStatus.CHOICES).get(item.review_status)])

return response

export_as_csv.short_description = "Export To CSV"


@admin.register(models.ProposalSection)
class ProposalSectionAdmin(AuditAdmin):
list_display = ("name", "active") + AuditAdmin.list_display
Expand All @@ -32,26 +54,27 @@ def get_queryset(self, request):
return qs.filter(
conference_reviewer__conference__in=[m.conference for m in moderators]
)

def get_form(self, request, obj=None, **kwargs):
form = super(ProposalSectionReviewerAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['conference_reviewer'].queryset = ConferenceProposalReviewer.objects.all().order_by('-created_at')
form.base_fields['conference_reviewer'].queryset = ConferenceProposalReviewer.objects.all().order_by(
'-created_at')
form.base_fields['proposal_section'].queryset = ProposalSection.objects.all().order_by('-created_at')
return form


@admin.register(models.ProposalType)
class ProposalTypeAdmin(AuditAdmin):
list_display = (
"name",
"active",
"start_date",
"end_date",
"name",
"active",
"start_date",
"end_date",
) + AuditAdmin.list_display


@admin.register(models.Proposal)
class ProposalAdmin(TimeAuditAdmin, SimpleHistoryAdmin):
class ProposalAdmin(TimeAuditAdmin, SimpleHistoryAdmin, ExportMixin):
list_display = (
"proposal_info",
"author_info",
Expand All @@ -72,6 +95,8 @@ class ProposalAdmin(TimeAuditAdmin, SimpleHistoryAdmin):
TextField: {"widget": AdminPagedownWidget},
}

actions = ["export_as_csv"]

def proposal_info(self, obj):
return "%s (%s)" % (obj.title, obj.proposal_type)

Expand Down

0 comments on commit b3a113f

Please sign in to comment.