Мне надо добавить возможность добавлять сразу несколько images за раз в админке. Я использовал inline поле, но оно по одному объекту добавляет, я хочу добавлять сразу несколько изображений, по этому решил использовать form и вроде оно работает как надо, но есть нюанс, мне нужно по нажатию как это можно делать с inline полем чтобы еще одна форма добавлялась и можно было еще набор images добавить или удалить. Вот код:
class MultipleFileInput(forms.ClearableFileInput):
allow_multiple_selected = True
class MultipleFileField(forms.FileField):
def __init__(self, *args, **kwargs):
kwargs.setdefault("widget", MultipleFileInput())
super().__init__(*args, **kwargs)
def clean(self, data, initial=None):
single_file_clean = super().clean
if isinstance(data, (list, tuple)):
result = [single_file_clean(d, initial) for d in data]
else:
result = single_file_clean(data, initial)
return result
class ProductForm(forms.ModelForm):
images = MultipleFileField(required=False) # Поле для загрузки нескольких изображений
class Meta:
model = Product
fields = [
'name',
'category',
'price',
'stock_quantity',
'is_new',
'is_on_sale',
'colors',
'sizes',
'description',
'compositions',
'images',
]
def clean_images(self):
images = self.cleaned_data.get('images')
if isinstance(images, list):
return images
return []
class ProductAdmin(admin.ModelAdmin):
list_display = (
"name",
"category",
"price",
"stock_quantity",
"is_new",
"is_on_sale",
"popularity",
)
search_fields = ("name", "slug", "category__name")
list_filter = ("category", "is_new", "is_on_sale")
#inlines = [ProductImageInline]
exclude = ["popularity", "is_on_sale", "slug"]
filter_horizontal = ("sizes", "colors", "compositions")
form = ProductForm
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
images = form.cleaned_data.get('images')
if images:
for image in images:
if image:
ProductImage.objects.create(product=obj, image=image)
admin.site.register(Product, ProductAdmin)
Вот примерно что я имею ввиду, но оно через инлайн поле не работает: