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, но я не смог найти способ увеличить это значение.