From 8f5dec53c750bcbd55ec9aa137566ab26d68277c Mon Sep 17 00:00:00 2001 From: Julien Constant Date: Wed, 10 May 2023 14:03:58 +0200 Subject: [PATCH] Fix Multiple Fields Inputs & `check` being override in base Models class --- core/__init__.py | 20 ++++++++++++++++++++ core/views/files.py | 4 ++-- counter/models.py | 4 ++-- counter/views.py | 10 +++++----- sas/views.py | 7 ++----- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/core/__init__.py b/core/__init__.py index 0aa913c4..4253a53f 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -13,3 +13,23 @@ # OR WITHIN THE LOCAL FILE "LICENSE" # # + +from django import forms + + +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 diff --git a/core/views/files.py b/core/views/files.py index 1047f381..85d19be6 100644 --- a/core/views/files.py +++ b/core/views/files.py @@ -33,6 +33,7 @@ import os from ajax_select import make_ajax_field +from core import MultipleFileField from core.models import SithFile, RealGroup, Notification from core.views import ( CanViewMixin, @@ -83,8 +84,7 @@ class AddFilesForm(forms.Form): folder_name = forms.CharField( label=_("Add a new folder"), max_length=30, required=False ) - file_field = forms.FileField( - widget=forms.ClearableFileInput(attrs={"multiple": True}), + file_field = MultipleFileField( label=_("Files"), required=False, ) diff --git a/counter/models.py b/counter/models.py index c6389349..16b69923 100644 --- a/counter/models.py +++ b/counter/models.py @@ -990,7 +990,7 @@ class CashRegisterSummaryItem(models.Model): ) value = CurrencyField(_("value")) quantity = models.IntegerField(_("quantity"), default=0) - check = models.BooleanField(_("check"), default=False) + checked = models.BooleanField(_("check"), default=False) class Meta: verbose_name = _("cash register summary item") @@ -998,7 +998,7 @@ class CashRegisterSummaryItem(models.Model): class Eticket(models.Model): """ - Eticket can be linked to a product an allows PDF generation + Eticket can be linked to a product and allows PDF generation """ product = models.OneToOneField( diff --git a/counter/views.py b/counter/views.py index 4d5af292..c317281a 100644 --- a/counter/views.py +++ b/counter/views.py @@ -1199,35 +1199,35 @@ class CashRegisterSummaryForm(forms.Form): cash_summary=summary, value=cd["check_1_value"], quantity=cd["check_1_quantity"], - check=True, + checked=True, ).save() if cd["check_2_quantity"]: CashRegisterSummaryItem( cash_summary=summary, value=cd["check_2_value"], quantity=cd["check_2_quantity"], - check=True, + checked=True, ).save() if cd["check_3_quantity"]: CashRegisterSummaryItem( cash_summary=summary, value=cd["check_3_value"], quantity=cd["check_3_quantity"], - check=True, + checked=True, ).save() if cd["check_4_quantity"]: CashRegisterSummaryItem( cash_summary=summary, value=cd["check_4_value"], quantity=cd["check_4_quantity"], - check=True, + checked=True, ).save() if cd["check_5_quantity"]: CashRegisterSummaryItem( cash_summary=summary, value=cd["check_5_value"], quantity=cd["check_5_quantity"], - check=True, + checked=True, ).save() if summary.items.count() < 1: summary.delete() diff --git a/sas/views.py b/sas/views.py index ff51fe37..9db4155a 100644 --- a/sas/views.py +++ b/sas/views.py @@ -17,6 +17,7 @@ from django.shortcuts import redirect from django.http import HttpResponse, Http404 from django.urls import reverse_lazy, reverse +from core import MultipleFileField from core.views.forms import SelectDate from django.views.generic import DetailView, TemplateView from django.views.generic.edit import UpdateView, FormMixin, FormView @@ -40,11 +41,7 @@ class SASForm(forms.Form): album_name = forms.CharField( label=_("Add a new album"), max_length=30, required=False ) - images = forms.ImageField( - widget=forms.ClearableFileInput(attrs={"multiple": True}), - label=_("Upload images"), - required=False, - ) + images = MultipleFileField(label=_("Upload images"), required=False) def process(self, parent, owner, files, automodere=False): try: