feat(integrations): добавить поле primary_category и маппинг категорий для интеграций
Добавлена поддержка выбора основной категории (primary_category) для товаров и наборов, а также новая модель IntegrationCategoryMapping для связи категорий с внешними площадками. Теперь можно указать категорию товара, которая будет использоваться при экспорте на внешние площадки (Recommerce, WooCommerce и др.), с возможностью настройки маппинга категорий для каждого типа интеграции.
This commit is contained in:
@@ -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': 'Артикул',
|
||||
|
||||
Reference in New Issue
Block a user