feat(integrations): добавить поле primary_category и маппинг категорий для интеграций

Добавлена поддержка выбора основной категории (primary_category) для товаров и наборов, а также новая модель IntegrationCategoryMapping для связи категорий с внешними площадками. Теперь можно указать категорию товара, которая будет использоваться при экспорте на внешние площадки (Recommerce, WooCommerce и др.), с возможностью настройки маппинга категорий для каждого типа интеграции.
This commit is contained in:
2026-01-14 01:53:38 +03:00
parent 7fd361aaf8
commit 1fb280607a
14 changed files with 288 additions and 15 deletions

View File

@@ -87,6 +87,15 @@ class ProductForm(SKUUniqueMixin, forms.ModelForm):
label="Категории"
)
primary_category = forms.ModelChoiceField(
queryset=ProductCategory.objects.filter(is_active=True),
required=False,
empty_label="Не выбрана",
label="Основная категория",
help_text="Используется для интеграций с внешними площадками",
widget=forms.Select(attrs={'class': 'form-select'})
)
tags = forms.ModelMultipleChoiceField(
queryset=ProductTag.objects.filter(is_active=True),
widget=forms.CheckboxSelectMultiple,
@@ -98,7 +107,7 @@ class ProductForm(SKUUniqueMixin, forms.ModelForm):
model = Product
fields = [
'name', 'sku', 'description', 'short_description', 'categories',
'tags', 'base_unit', 'price', 'sale_price', 'status',
'primary_category', 'tags', 'base_unit', 'price', 'sale_price', 'status',
'is_new', 'is_popular', 'is_special'
]
labels = {
@@ -193,6 +202,15 @@ class ProductKitForm(SKUUniqueMixin, forms.ModelForm):
label="Категории"
)
primary_category = forms.ModelChoiceField(
queryset=ProductCategory.objects.filter(is_active=True),
required=False,
empty_label="Не выбрана",
label="Основная категория",
help_text="Используется для интеграций с внешними площадками",
widget=forms.Select(attrs={'class': 'form-select'})
)
tags = forms.ModelMultipleChoiceField(
queryset=ProductTag.objects.filter(is_active=True),
widget=forms.CheckboxSelectMultiple,
@@ -204,7 +222,7 @@ class ProductKitForm(SKUUniqueMixin, forms.ModelForm):
model = ProductKit
fields = [
'name', 'sku', 'description', 'short_description', 'categories',
'tags', 'sale_price', 'price_adjustment_type', 'price_adjustment_value', 'status'
'primary_category', 'tags', 'sale_price', 'price_adjustment_type', 'price_adjustment_value', 'status'
]
labels = {
'name': 'Название',
@@ -671,9 +689,18 @@ class ConfigurableProductForm(SKUUniqueMixin, forms.ModelForm):
"""
Форма для создания и редактирования вариативного товара.
"""
primary_category = forms.ModelChoiceField(
queryset=ProductCategory.objects.filter(is_active=True),
required=False,
empty_label="Не выбрана",
label="Основная категория",
help_text="Используется для интеграций с внешними площадками",
widget=forms.Select(attrs={'class': 'form-select'})
)
class Meta:
model = ConfigurableProduct
fields = ['name', 'sku', 'description', 'short_description', 'status']
fields = ['name', 'sku', 'description', 'short_description', 'primary_category', 'status']
labels = {
'name': 'Название',
'sku': 'Артикул',