From 6219dcf7b06f9a1e0bf01b29fc666514c67e30f4 Mon Sep 17 00:00:00 2001 From: Mamalizz-dev Date: Sat, 20 Dec 2025 19:47:07 +0330 Subject: [PATCH] price format --- backend/core/static/price-format.js | 20 ++++++++++++++++++++ backend/product/admin.py | 20 +++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 backend/core/static/price-format.js diff --git a/backend/core/static/price-format.js b/backend/core/static/price-format.js new file mode 100644 index 0000000..2d8640e --- /dev/null +++ b/backend/core/static/price-format.js @@ -0,0 +1,20 @@ +document.addEventListener("DOMContentLoaded", () => { + document.querySelectorAll(".price-input").forEach((input) => { + input.value = format(input.value); + + input.addEventListener("input", () => { + const cursor = input.selectionStart; + const raw = input.value.replace(/,/g, ""); + input.value = format(raw); + input.setSelectionRange(cursor, cursor); + }); + input.form.addEventListener("submit", () => { + input.value = input.value.replace(/,/g, ""); + }); + }); +}); + +const format = (value) => { + if (!value) return ""; + return value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","); +}; diff --git a/backend/product/admin.py b/backend/product/admin.py index b2a4a6e..b8720fd 100644 --- a/backend/product/admin.py +++ b/backend/product/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin, messages +from django import forms # from product.tasks import update_prices from .models import * from unfold.admin import TabularInline, StackedInline @@ -191,6 +192,18 @@ class DetailInLine(StackedInline): min_num = 1 max_num = 4 + +# --- ProductVariantAdminForm for price formatting --- +class ProductVariantAdminForm(forms.ModelForm): + class Meta: + model = ProductVariant + fields = "__all__" + widgets = { + "input_price": forms.TextInput(attrs={"class": "price-input"}), + "min_price": forms.TextInput(attrs={"class": "price-input"}), + "profit": forms.TextInput(attrs={"class": "price-input"}), + } + @admin.register(ProductDetailModel) class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin): import_form_class = ImportForm @@ -210,6 +223,7 @@ class ProductDetailModel1Admin(ModelAdmin, ImportExportModelAdmin): class ProductVariantInLine(ProductVariantInlineAdminPermission, StackedInline): model = ProductVariant + form = ProductVariantAdminForm extra = 0 show_change_link = True tab = True @@ -224,11 +238,15 @@ class ProductVariantInLine(ProductVariantInlineAdminPermission, StackedInline): if db_field.name == 'color': kwargs['widget'] = UnfoldAdminColorInputWidget() return super().formfield_for_dbfield(db_field, request, **kwargs) - from unfold.contrib.filters.admin import RelatedDropdownFilter @admin.register(ProductVariant) class ProductVariantAdmin(ProductVariantAdminPermission, ModelAdmin, ImportExportModelAdmin): + form = ProductVariantAdminForm + + class Media: + js = ("price-format.js",) + import_form_class = ImportForm export_form_class = ExportForm autocomplete_fields = ['product_attributes', 'images', 'in_pack_items', 'details']