3
3
from django .conf import settings
4
4
from django .contrib import admin
5
5
from django .db .models import Count
6
+ from django .http import HttpResponse
7
+
6
8
from drf_api_logger .utils import database_log_enabled
7
9
8
10
if database_log_enabled ():
9
11
from drf_api_logger .models import APILogsModel
10
12
from django .utils .translation import gettext_lazy as _
13
+ import csv
14
+
15
+
16
+ class ExportCsvMixin :
17
+ def export_as_csv (self , request , queryset ):
18
+ meta = self .model ._meta
19
+ field_names = [field .name for field in meta .fields ]
20
+
21
+ response = HttpResponse (content_type = 'text/csv' )
22
+ response ['Content-Disposition' ] = 'attachment; filename={}.csv' .format (meta )
23
+ writer = csv .writer (response )
24
+
25
+ writer .writerow (field_names )
26
+ for obj in queryset :
27
+ row = writer .writerow ([getattr (obj , field ) for field in field_names ])
28
+
29
+ return response
30
+
31
+ export_as_csv .short_description = "Export Selected"
11
32
12
33
class SlowAPIsFilter (admin .SimpleListFilter ):
13
34
title = _ ('API Performance' )
@@ -54,7 +75,9 @@ def queryset(self, request, queryset):
54
75
55
76
return queryset
56
77
57
- class APILogsAdmin (admin .ModelAdmin ):
78
+ class APILogsAdmin (admin .ModelAdmin , ExportCsvMixin ):
79
+
80
+ actions = ["export_as_csv" ]
58
81
59
82
def __init__ (self , model , admin_site ):
60
83
super ().__init__ (model , admin_site )
@@ -83,6 +106,7 @@ def added_on_time(self, obj):
83
106
exclude = ('added_on' ,)
84
107
85
108
change_list_template = 'charts_change_list.html'
109
+ change_form_template = 'change_form.html'
86
110
date_hierarchy = 'added_on'
87
111
88
112
def changelist_view (self , request , extra_context = None ):
@@ -108,7 +132,19 @@ def changelist_view(self, request, extra_context=None):
108
132
return response
109
133
110
134
def get_queryset (self , request ):
111
- return super (APILogsAdmin , self ).get_queryset (request )
135
+ drf_api_logger_default_database = 'default'
136
+ if hasattr (settings , 'DRF_API_LOGGER_DEFAULT_DATABASE' ):
137
+ drf_api_logger_default_database = settings .DRF_API_LOGGER_DEFAULT_DATABASE
138
+ return super (APILogsAdmin , self ).get_queryset (request ).using (drf_api_logger_default_database )
139
+
140
+ def changeform_view (self , request , object_id = None , form_url = '' , extra_context = None ):
141
+ if request .GET .get ('export' , False ):
142
+ drf_api_logger_default_database = 'default'
143
+ if hasattr (settings , 'DRF_API_LOGGER_DEFAULT_DATABASE' ):
144
+ drf_api_logger_default_database = settings .DRF_API_LOGGER_DEFAULT_DATABASE
145
+ export_queryset = self .get_queryset (request ).filter (pk = object_id ).using (drf_api_logger_default_database )
146
+ return self .export_as_csv (request , export_queryset )
147
+ return super (APILogsAdmin , self ).changeform_view (request , object_id , form_url , extra_context )
112
148
113
149
def has_add_permission (self , request , obj = None ):
114
150
return False
0 commit comments