from django.contrib import admin from .models import * from unfold.admin import TabularInline, StackedInline from import_export.admin import ImportExportModelAdmin from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm from unfold.contrib.forms.widgets import ArrayWidget, WysiwygWidget from django.contrib.postgres.fields import ArrayField from utils.admin import ModelAdmin from django.utils.html import format_html, format_html_join class OrderItemModelInline(StackedInline): model = OrderItemModel extra = 0 max_num = 0 def has_delete_permission(self, request, obj=None): return False def get_readonly_fields(self, request, obj=None): return [field.name for field in self.model._meta.fields] @admin.register(DiscountCode) class DiscountCodeAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm list_display = ['code', 'expiration_date', 'percent', 'quantity'] @admin.register(OrderModel) class OrderAdmin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm export_form_class = ExportForm list_filter = ['is_paid', 'status'] list_display = ['user', 'is_paid', 'status', 'discount_code', 'address', ] readonly_fields = ('created_at', 'bank_links') compressed_fields = True warn_unsaved_form = True exclude = ('bank_records',) formfield_overrides = { ArrayField: { "widget": ArrayWidget, } } inlines = [OrderItemModelInline] def bank_links(self, obj): banks = obj.bank_records.all() if not banks.exists(): return "-" return format_html_join( "", '{}', [(bank.id, bank.tracking_code) for bank in banks] ) or "-" bank_links.short_description = "Bank Records"