iommirocks / iommi

Your first pick for a django power cord
http://iommi.rocks
BSD 3-Clause "New" or "Revised" License
718 stars 47 forks source link

EmailField with required=False still required #423

Closed berycz closed 1 year ago

berycz commented 1 year ago
class Artist(models.Model):
    name = models.CharField(max_length=255, db_index=True)
    email = models.EmailField(
        verbose_name="E-mail address",
        blank=True,
    )

    def __str__(self):
        return self.name
class ArtistForm(iommi.Form):
    class Meta:
        auto__model = Artist
        fields__email__required = False

yet when I keep email blank I get Enter a valid email address.

berycz commented 1 year ago

temporary fix:

from iommi.form import email_parse

class ArtistForm(iommi.Form):
    class Meta:
        auto__model = Artist
        fields__email__required = False
        fields__email__parse = lambda string_value, **kwargs: email_parse(string_value=string_value, **kwargs) if string_value else string_value
berycz commented 1 year ago

I'm thinking about this one, do you think there should be in form.py Field._parse() something like this? (starting at L855)

        else:
            if self.raw_data == '' and self.parse_empty_string_as_none:
                self.parsed_data = None
+             elif self.raw_data == '' and not self.required:
+                 self.parsed_data = ''
            elif self.raw_data is not None:
                self.parsed_data = self._parse_raw_value(self.raw_data)
            else:
                self.parsed_data = None

because I suppose it's the same problem for url_parse

EDIT: hmm, maybe not, this would probably be problem for int/decimal/time/etc.