diff --git a/demo/array_field/models.py b/demo/array_field/models.py index b82a24e..e70d65a 100644 --- a/demo/array_field/models.py +++ b/demo/array_field/models.py @@ -4,7 +4,7 @@ class TestWithArrayField(models.Model): - images = ImageListField(blank=True, null=True, upload_to="admin_test") + images = ImageListField(blank=True, null=True, max_images=2, upload_to="admin_test") class Meta: verbose_name = "(Array Field) Default" diff --git a/demo/inline/admin.py b/demo/inline/admin.py index 9a8d699..a7b53a2 100644 --- a/demo/inline/admin.py +++ b/demo/inline/admin.py @@ -7,6 +7,7 @@ class InlineEditor(ImageUploaderInline): model = models.InlineItem + max_num = 2 @admin.register(models.Inline) diff --git a/image_uploader_widget/postgres/fields.py b/image_uploader_widget/postgres/fields.py index b3f17e0..27910c2 100644 --- a/image_uploader_widget/postgres/fields.py +++ b/image_uploader_widget/postgres/fields.py @@ -21,11 +21,13 @@ def __init__( max_length: int = 150, storage: Optional[Storage] = None, upload_to: str = "", + max_images=1000, **kwargs, ): self.max_length = max_length or 150 self.storage = storage or default_storage self.upload_to = upload_to or "" + self.max_images = max_images kwargs["base_field"] = ImageField( max_length=self.max_length, upload_to=upload_to ) @@ -91,5 +93,6 @@ def formfield(self, **kwargs): **{ "form_class": ImageListFormField, **kwargs, + "max_images": self.max_images, } ) diff --git a/image_uploader_widget/postgres/forms.py b/image_uploader_widget/postgres/forms.py index 6f5d182..d72bb3b 100644 --- a/image_uploader_widget/postgres/forms.py +++ b/image_uploader_widget/postgres/forms.py @@ -13,13 +13,13 @@ class ImageListFormField(forms.Field): "item_invalid": _("Item %(name)s in the array did not validate:"), } - def __init__(self, **kwargs): + def __init__(self, max_images=1000, **kwargs): kwargs.pop("base_field") self.max_length = kwargs.pop("max_length") or 150 self.required = False self.base_field = forms.ImageField(max_length=self.max_length) - widget = ImageUploaderArrayWidget() + widget = ImageUploaderArrayWidget(max_images=max_images) kwargs.setdefault("widget", widget) super().__init__(**kwargs) diff --git a/image_uploader_widget/postgres/widget.py b/image_uploader_widget/postgres/widget.py index d2fdf44..2abba28 100644 --- a/image_uploader_widget/postgres/widget.py +++ b/image_uploader_widget/postgres/widget.py @@ -27,8 +27,15 @@ def get_drop_icon(self): return self.drop_icon def __init__( - self, drop_text="", empty_text="", empty_icon="", drop_icon="", **kwargs + self, + max_images=1000, + drop_text="", + empty_text="", + empty_icon="", + drop_icon="", + **kwargs, ): + self.max_images = max_images self.drop_text = drop_text self.empty_text = empty_text self.empty_icon = empty_icon @@ -73,6 +80,7 @@ def get_context(self, name, value, attrs=None): "prefix": context["widget"]["name"], }, }, + "max_images": self.max_images, "custom": { "drop_text": self.get_drop_text(), "empty_text": self.get_empty_text(), diff --git a/image_uploader_widget/static/image_uploader_widget/js/image-uploader-inline.js b/image_uploader_widget/static/image_uploader_widget/js/image-uploader-inline.js index 1668d47..b6b019f 100644 --- a/image_uploader_widget/static/image_uploader_widget/js/image-uploader-inline.js +++ b/image_uploader_widget/static/image_uploader_widget/js/image-uploader-inline.js @@ -158,7 +158,9 @@ function handleAddNewImage(root, tempFileInput, inputFile = null) { rowFileInput.files = dataTransferList.files; } - tempFileInput.value = null + if (tempFileInput) { + tempFileInput.value = null + } updateAllIndexes(root); } diff --git a/image_uploader_widget/templates/image_uploader_widget/postgres/image_array.html b/image_uploader_widget/templates/image_uploader_widget/postgres/image_array.html index 10b236b..0e98942 100644 --- a/image_uploader_widget/templates/image_uploader_widget/postgres/image_array.html +++ b/image_uploader_widget/templates/image_uploader_widget/postgres/image_array.html @@ -14,7 +14,7 @@ - +