From 4482940110a7449cfd96c20db03447200648df15 Mon Sep 17 00:00:00 2001 From: Behshad RahmanPour Date: Fri, 10 Nov 2023 22:20:03 +0330 Subject: [PATCH] creation export_to_csv_file function in OrderAdmin for export data to csv file --- order/admin.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/order/admin.py b/order/admin.py index 7b233d1..7383a0c 100644 --- a/order/admin.py +++ b/order/admin.py @@ -1,3 +1,7 @@ +import csv +import datetime +from django.http import HttpResponse + from django.contrib import admin from django.utils.safestring import mark_safe @@ -13,6 +17,36 @@ def order_payment(obj): order_payment.short_description = 'Stripe Payment' + +def export_to_csv_file(admin_model, request, queryset): + ''' + This function is for export data to csv file. + ''' + + opts = admin_model.model._meta + content_disposition = f'attachment; filename={opts.verbose_name}.csv' + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = content_disposition + writer = csv.writer(response) + fields = [field for field in opts.get_fields() if not field.many_to_many and not field.one_to_many] + # write the first row with header information + writer.writerow( + [field.verbose_name for field in fields] + ) + # write data rows + for obj in queryset: + data_row = [] + for field in fields: + value = getattr(obj, field.name) + if isinstance(value, datetime.datetime): + value = value.strftime('%d/%m/%Y') + data_row.append(value) + writer.writerow(data_row) + return response + +export_to_csv_file.short_description = 'Export To CSV' + + class OrderItemInline(admin.TabularInline): model = OrderItem raw_id_fields = ['product'] @@ -32,3 +66,4 @@ class OrderAdmin(admin.ModelAdmin): list_filter = ['email', 'paid', 'create_at', 'update_at'] inlines = [OrderItemInline] + actions = [export_to_csv_file]