Django: Пользовательский набор BaseInlineFormSet. Дополнительные формы

Я пытаюсь реализовать инлайн для админки модели Product, чтобы в дополнение к формам для существующих отношений ProductAttribute, по умолчанию добавлялись формы для всех атрибутов категории редактируемого в данный момент товара. Проблема в том, что пока формы есть, сохранение не приводит к созданию отношения ProductAttribute в базе данных, и очищенные_данные этих форм пусты.

Мой код: admin.py

...
class ProductAttributeInline(admin.TabularInline):
    model = ProductAttribute
    formset = ProductAttributeInlineFormset
    extra = 0
    fields = ('attribute', 'value')
    readonly_fields = ('attribute',)
    can_delete = False

    def has_add_permission(self, request, obj=None):
        return False


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = (
        'name',
        'category',
        'price',
        'sku',
        'created_at',
        'updated_at'
    )
    search_fields = ('name', 'sku')
    list_filter = ('category',)
    inlines = (ProductAttributeInline,)
...

forms.py

from django import forms

from .models import ProductAttribute


class ProductAttributeInlineFormset(forms.models.BaseInlineFormSet):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance and self.instance.pk:
            category = self.instance.category
            if category:
                attributes = category.attributes.all()
                existing_attributes = set(
                    self.queryset.values_list('attribute', flat=True)
                )
                for attribute in attributes:
                    if attribute.id not in existing_attributes:
                        form_index = (
                            len(self.forms) + len(existing_attributes) - 1
                        )
                        form = self._construct_form(
                            instance=ProductAttribute(
                                product=self.instance,
                                attribute=attribute,
                            ),
                            i=form_index
                        )
                        self.forms.append(form)
            self.total_forms = len(self.forms)

Я заметил, что 'attributes-TOTAL_FORMS' в form.data равен 1, но я не смог найти способ увеличить это значение.

Вернуться на верх