Hi group,
We have several accepted tickets regarding developer headaches when a blank=True field, which skips model validation by design[1], contains inappropriate empty values (e.g. None for a not-nullable field or the empty string where empty strings aren't allowed). I want to see what the community thinks is reasonable here and move them to a resolution or potentially wontfix them. # 22224 — CharField <http://code.djangoproject.com/ticket/22224> (None from an application/json encoded payload isn’t cleaned to empty string) # 27697 — JSONField <http://code.djangoproject.com/ticket/27697> (None isn’t cleaned to “{}”) # 20205 — PositiveIntegerField <http://code.djangoproject.com/ticket/20205> (empty string unexpectedly passes model validation if blank=True. In this case the user was opting-in to model validation.) *** For 22224—CharField—we could take Simon’s proposal <https://code.djangoproject.com/ticket/22224#comment:5> to last-minute cast None to empty string in get_db_prep_value() if the field’s empty_strings_allowed is True and null=False. For 27696—JSONField—similarly, we could cast from None to "{}" if null=False. For 20205—PositiveIntegerField, and by extension, any field where empty_strings_allowed is False—we might run model validation if we have an empty string to ensure we fail at the model level instead of the db, although this is not the usual practice for blank=True fields. See PR <https://github.com/django/django/pull/14666>. The backwards compatibility concerns seem limited, because users are presumably working around these edge cases today, since invalid data is not being saved to the database. But there is the question of how much effort to expend here. I’m willing to see these through if we have a consensus around the best way to proceed. All best, Jacob [1] blank=True and null=False and injecting-data-before-save being an idiom we don’t want to remove, see: https://code.djangoproject.com/ticket/22224#comment:7 -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/58616ad3-54b6-4b21-b252-96040680fa04n%40googlegroups.com.