Features: 1) Add system_attributes JSONField to Stock model; 2) Introduce StockForm with system_attributes widget; 3) Integrate StockForm into StockAdmin in Django admin panel.

Fixes: None;

Extra: 1) Update migrations to include addition of `system_attributes`; 2) Modify admin interface to display `system_attributes` in additional_fields.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-10-26 19:59:43 +03:00
parent 753a2059d4
commit d2b3dccda9
4 changed files with 33 additions and 1 deletions

View file

@ -16,7 +16,7 @@ from modeltranslation.translator import NotRegistered, translator
from modeltranslation.utils import get_translation_fields
from mptt.admin import DraggableMPTTAdmin
from core.forms import CRMForm, OrderForm, OrderProductForm, VendorForm
from core.forms import CRMForm, OrderForm, OrderProductForm, StockForm, VendorForm
from core.models import (
Address,
Attribute,
@ -743,6 +743,7 @@ class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # typ
class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: ignore [misc, type-arg]
# noinspection PyClassVar
model = Stock # type: ignore [misc]
form = StockForm
list_display = (
"product",
"vendor",
@ -777,6 +778,9 @@ class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): # type: i
"purchase_price",
"digital_asset",
]
additional_fields = [
"system_attributes",
]
relation_fields = [
"product",
"vendor",

View file

@ -42,6 +42,15 @@ class OrderProductForm(forms.ModelForm):
}
class StockForm(forms.ModelForm):
class Meta:
model = Product
fields = "__all__"
widgets = {
"system_attributes": JSONTableWidget(),
}
class OrderForm(forms.ModelForm):
class Meta:
model = Order

View file

@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2025-10-26 16:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0050_remove_attribute_categories'),
]
operations = [
migrations.AddField(
model_name='stock',
name='system_attributes',
field=models.JSONField(default=dict, verbose_name='system attributes'),
),
]

View file

@ -551,6 +551,7 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): # type: ignore [mi
verbose_name=_("digital file"),
upload_to="downloadables/",
)
system_attributes = JSONField(default=dict, verbose_name=_("system attributes"))
def __str__(self) -> str:
return f"{self.vendor.name} - {self.product!s}"