|
| 1 | +import csv |
1 | 2 | import logging |
2 | 3 | from datetime import timedelta |
3 | 4 | from typing import Optional, Sequence |
4 | | - |
5 | 5 | import django.forms as forms |
6 | 6 | from django.conf import settings |
7 | 7 | from django.contrib import admin, messages |
8 | 8 | from django.contrib.admin.models import LogEntry |
9 | 9 | from django.db.models import OuterRef, Subquery |
10 | 10 | from django.db.models.fields import BLANK_CHOICE_DASH |
11 | 11 | from django.forms import CheckboxInput, Select, Textarea |
12 | | -from django.http import HttpRequest |
| 12 | +from django.http import HttpRequest, HttpResponse |
13 | 13 | from django.shortcuts import redirect, render |
14 | 14 | from django.utils import timezone |
15 | 15 | from django.utils.html import format_html |
@@ -734,9 +734,25 @@ class PlansInline(admin.TabularInline): |
734 | 734 | Plan._meta.get_field("benefits"): {"widget": Textarea(attrs={"rows": 3})}, |
735 | 735 | } |
736 | 736 |
|
| 737 | +def export_to_csv(modeladmin, request, queryset): |
| 738 | + model = queryset.model |
| 739 | + response = HttpResponse(content_type="text/csv") |
| 740 | + response["Content-Disposition"] = f'attachment; filename="{model._meta.model_name}s.csv"' |
| 741 | + writer = csv.writer(response) |
| 742 | + |
| 743 | + writer.writerow([field.name for field in model._meta.fields]) |
| 744 | + |
| 745 | + for obj in queryset: |
| 746 | + writer.writerow([getattr(obj, field.name) for field in model._meta.fields]) |
| 747 | + |
| 748 | + return response |
| 749 | + |
| 750 | +export_to_csv.short_description = "Export selected items to CSV" |
| 751 | + |
737 | 752 |
|
738 | 753 | @admin.register(Tier) |
739 | 754 | class TierAdmin(admin.ModelAdmin): |
| 755 | + actions = [export_to_csv] |
740 | 756 | list_display = ( |
741 | 757 | "tier_name", |
742 | 758 | "bundle_analysis", |
@@ -791,6 +807,8 @@ def clean_monthly_uploads_limit(self) -> int | None: |
791 | 807 | @admin.register(Plan) |
792 | 808 | class PlanAdmin(admin.ModelAdmin): |
793 | 809 | form = PlanAdminForm |
| 810 | + actions = [export_to_csv] |
| 811 | + |
794 | 812 | list_display = ( |
795 | 813 | "name", |
796 | 814 | "marketing_name", |
|
0 commit comments