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
@@ -119,6 +121,7 @@ class CustomUserAdmin(admin.ModelAdmin):
119121
120122 readonly_fields = ("ordering_score" ,)
121123 change_form_template = "users/admin/users_change_form.html"
124+ change_list_template = "users/admin/users_change_list.html"
122125
123126 def save_model (self , request , obj , form , change ):
124127 # if user_type changed, then delete all related fields
@@ -177,13 +180,22 @@ def get_urls(self):
177180 self .admin_site .admin_view (self .mass_mail ),
178181 name = "user_mass_mail" ,
179182 ),
183+ path (
184+ "all-users-email-excel/" ,
185+ self .admin_site .admin_view (self .all_users_email_excel ),
186+ name = "users_email_excel" ,
187+ ),
180188 ]
181189 return custom_urls + default_urls
182190
183191 def mass_mail (self , request ):
184192 users = CustomUser .objects .all ()
185193 return MailingTemplateRender ().render_template (request , None , users , None )
186194
195+ def all_users_email_excel (self , request ):
196+ users = CustomUser .objects .only ("first_name" , "last_name" , "email" ).iterator ()
197+ return self .get_export_users_emails (users )
198+
187199 def mailing (self , request , user_object ):
188200 user = CustomUser .objects .get (pk = user_object )
189201 users = [user ]
@@ -194,6 +206,21 @@ def force_verify(self, request, object_id):
194206 force_verify_user (user )
195207 return redirect ("admin:users_customuser_change" , object_id )
196208
209+ def get_export_users_emails (self , users ):
210+ response_data = tablib .Dataset (headers = ["ФИО" , "Email" ])
211+
212+ for user in users :
213+ response_data .append ([user .first_name + " " + user .last_name , user .email ])
214+
215+ binary_data = response_data .export ("xlsx" )
216+ file_name = "all_users_names_emails"
217+ response = HttpResponse (
218+ content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ,
219+ headers = {"Content-Disposition" : f'attachment; filename="{ file_name } .xlsx"' },
220+ )
221+ response .write (binary_data )
222+ return response
223+
197224
198225@admin .register (UserAchievement )
199226class UserAchievementAdmin (admin .ModelAdmin ):
0 commit comments