diff --git a/localized_fields/fields/field.py b/localized_fields/fields/field.py index 9adb446..6a57a2f 100644 --- a/localized_fields/fields/field.py +++ b/localized_fields/fields/field.py @@ -1,6 +1,6 @@ import json -from typing import Union +from typing import Union, List from django.conf import settings from django.db.utils import IntegrityError @@ -27,12 +27,12 @@ class LocalizedField(HStoreField): # The descriptor to use for accessing the attribute off of the class. descriptor_class = LocalizedValueDescriptor - def __init__(self, *args, **kwargs): + def __init__(self, *args, required: Union[bool, List[str]]=None, **kwargs): """Initializes a new instance of :see:LocalizedField.""" - super(LocalizedField, self).__init__(*args, **kwargs) + super(LocalizedField, self).__init__(*args, required=required, **kwargs) - if self.required is None and self.blank: + if (self.required is None and self.blank) or self.required is False: self.required = [] elif self.required is None and not self.blank: self.required = [settings.LANGUAGE_CODE] @@ -213,11 +213,9 @@ class LocalizedField(HStoreField): def formfield(self, **kwargs): """Gets the form field associated with this field.""" - defaults = dict(form_class=LocalizedFieldForm) - - form_class = kwargs.get('form_class', LocalizedFieldForm) - if issubclass(form_class, LocalizedFieldForm): - defaults.update(dict(required_langs=self.required)) - + defaults = dict( + form_class=LocalizedFieldForm, + required=False if self.blank else self.required + ) defaults.update(kwargs) return super().formfield(**defaults) diff --git a/localized_fields/forms.py b/localized_fields/forms.py index fb8e1c3..21606cf 100644 --- a/localized_fields/forms.py +++ b/localized_fields/forms.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Union from django import forms from django.conf import settings @@ -19,21 +19,22 @@ class LocalizedFieldForm(forms.MultiValueField): field_class = forms.fields.CharField value_class = LocalizedValue - def __init__(self, *args, required_langs: List[str]=[], **kwargs): + def __init__(self, *args, required: Union[bool, List[str]]=False, **kwargs): """Initializes a new instance of :see:LocalizedFieldForm.""" fields = [] for lang_code, _ in settings.LANGUAGES: field_options = dict( - required=lang_code in required_langs, + required=required if type(required) is bool else (lang_code in + required), label=lang_code ) - fields.append(self.field_class(**field_options)) super(LocalizedFieldForm, self).__init__( fields, + required=required if type(required) is bool else True, require_all_fields=False, *args, **kwargs )