1+ import tablib
12from django .conf import settings
23from django .contrib import admin
4+ from django .http import HttpResponse
35from django .shortcuts import redirect
46from django .urls import path
57
@@ -113,6 +115,7 @@ class CustomUserAdmin(admin.ModelAdmin):
113115
114116 readonly_fields = ("ordering_score" ,)
115117 change_form_template = "users/admin/users_change_form.html"
118+ change_list_template = "users/admin/users_change_list.html"
116119
117120 def save_model (self , request , obj , form , change ):
118121 # if user_type changed, then delete all related fields
@@ -171,13 +174,22 @@ def get_urls(self):
171174 self .admin_site .admin_view (self .mass_mail ),
172175 name = "user_mass_mail" ,
173176 ),
177+ path (
178+ "all-users-email-excel/" ,
179+ self .admin_site .admin_view (self .all_users_email_excel ),
180+ name = "users_email_excel" ,
181+ ),
174182 ]
175183 return custom_urls + default_urls
176184
177185 def mass_mail (self , request ):
178186 users = CustomUser .objects .all ()
179187 return MailingTemplateRender ().render_template (request , None , users , None )
180188
189+ def all_users_email_excel (self , request ):
190+ users = CustomUser .objects .only ("first_name" , "last_name" , "email" ).iterator ()
191+ return self .get_export_users_emails (users )
192+
181193 def mailing (self , request , user_object ):
182194 user = CustomUser .objects .get (pk = user_object )
183195 users = [user ]
@@ -188,6 +200,21 @@ def force_verify(self, request, object_id):
188200 force_verify_user (user )
189201 return redirect ("admin:users_customuser_change" , object_id )
190202
203+ def get_export_users_emails (self , users ):
204+ response_data = tablib .Dataset (headers = ["ФИО" , "Email" ])
205+
206+ for user in users :
207+ response_data .append ([user .first_name + " " + user .last_name , user .email ])
208+
209+ binary_data = response_data .export ("xlsx" )
210+ file_name = "all_users_names_emails"
211+ response = HttpResponse (
212+ content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
213+ headers = {"Content-Disposition" : f'attachment; filename="{ file_name } .xlsx"' },
214+ )
215+ response .write (binary_data )
216+ return response
217+
191218
192219@admin .register (UserAchievement )
193220class UserAchievementAdmin (admin .ModelAdmin ):
0 commit comments