Skip to content

Commit

Permalink
creation export_to_csv_file function in OrderAdmin for export data to…
Browse files Browse the repository at this point in the history
… csv file
  • Loading branch information
behshadrhp committed Nov 10, 2023
1 parent e65c37d commit 4482940
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions order/admin.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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']
Expand All @@ -32,3 +66,4 @@ class OrderAdmin(admin.ModelAdmin):

list_filter = ['email', 'paid', 'create_at', 'update_at']
inlines = [OrderItemInline]
actions = [export_to_csv_file]

0 comments on commit 4482940

Please sign in to comment.