Omadbek Qosimov's blog
27 subscribers
43 photos
13 videos
5 files
47 links
Download Telegram
export data in csv django admin
#django #admin #export
👍1
Omadbek Qosimov's blog
Photo
recourse.py

from import_export import resources, fields
from .models import Order
from import_export.widgets import ForeignKeyWidget,ManyToManyWidget
from apps.depreciation.models import DepreciationItem
from apps.profile.models import User

class OrderResource(resources.ModelResource):
customer = fields.Field(
column_name='Customer Name',
attribute='user',
widget=ForeignKeyWidget(User, 'id'))
saler = fields.Field(
column_name='Saler Name',
attribute='user',
widget=ForeignKeyWidget(User, 'id'))

depreciation = fields.Field(column_name="Depreciation")
category = fields.Field(column_name='Category name')

class Meta:
model = Order
fields = ('id', 'status', 'customer','price','category','depreciation','created_at')

def dehydrate_category(self, order):
return order.product.depreciation_cat.title

def dehydrate_depreciation(self, order):
deprecation = DepreciationItem.objects.get(office = order.product.office,category = order.product.depreciation_cat)
return f"year:{deprecation.year}, office: {deprecation.office.title}, percantage: {deprecation.percentage}"
def dehydrate_customer(self, order):
if order.user:
return f"{order.user.first_name} {order.user.last_name}"
return order.user.username

def dehydrate_saler(self, order):
if order.saler:

return order.saler.get_full_name() if order.saler.get_full_name() else order.saler.username
return ""


admin.py

@admin.register(Order)
class OrderAdmin(AdminChartMixin, ImportExportModelAdmin):
list_display = ('product', 'user', 'status', 'created_at', 'updated_at')
list_filter = ('status', 'created_at', 'updated_at')
list_editable = ('status', )
list_chart_type = "pie"
list_chart_data = {}
list_chart_options = {"aspectRatio": 6}
list_chart_config = None
readonly_fields = ('saler',)
resource_class = OrderResource

def get_list_chart_data(self, queryset):
if not queryset:
return {}
data = queryset.values('status').annotate(count=Count('id'))
labels = [entry['status'] for entry in data]
counts = [entry['count'] for entry in data]

return {
"labels": labels,
"datasets": [
{
"data": counts,
"backgroundColor": [
"#79aec8", "#b6d6f2", "#aac3e4", "#8aafd4",
][:len(labels)],
},
],
}
def save_model(self, request, obj, form, change):
if obj.status == 'purchased' and not obj.saler:
obj.saler = request.user
super().save_model(request, obj, form, change)


pip install django-import-export

#csv #admin
👍1