Re: FIleField(null=True) (Was: Guardrails around lack of model validation on blank=True fields)

2021-08-01 Thread Carlton Gibson
Hi Raffaele. Looking at #10244, it looks as if it needs someone to pick up 
Aymeric's suggestion. Would that be you? 😀
(Since you favour the option 2 there, I'd try that — it's probably OK with 
a suitable release note, as Aymeric said.) 
C. 

On Tuesday, 27 July 2021 at 23:46:33 UTC+2 Raffaele Salmaso wrote:

> Hi all,
> related to these tickets I want to remind this old ticket 
> https://code.djangoproject.com/ticket/10244 which needs a decision.
>
> Thanks!
>
> On Sun, Jul 25, 2021 at 3:12 PM Jacob Walls  wrote:
>
>> 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.
>>
>> # 4 — CharField  (None 
>> from an application/json encoded payload isn’t cleaned to empty string)
>>
>> # 27697 — JSONField  (None 
>> isn’t cleaned to “{}”)
>>
>> # 20205 — PositiveIntegerField 
>>  (empty string unexpectedly 
>> passes model validation if blank=True. In this case the user was opting-in 
>> to model validation.)
>>
>> ***
>>
>> For 4—CharField—we could take Simon’s proposal 
>>  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 
>> .
>>
>> 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/4#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-develop...@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
>>  
>> 
>> .
>>
>
>
> -- 
> | Raffaele Salmaso
> | https://salmaso.org
> | https://bitbucket.org/rsalmaso
> | https://github.com/rsalmaso
>

-- 
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/e694a082-48da-44bc-b3c0-5503176b91c9n%40googlegroups.com.


FIleField(null=True) (Was: Guardrails around lack of model validation on blank=True fields)

2021-07-27 Thread Raffaele Salmaso
Hi all,
related to these tickets I want to remind this old ticket
https://code.djangoproject.com/ticket/10244 which needs a decision.

Thanks!

On Sun, Jul 25, 2021 at 3:12 PM Jacob Walls 
wrote:

> 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.
>
> # 4 — CharField  (None
> from an application/json encoded payload isn’t cleaned to empty string)
>
> # 27697 — JSONField  (None
> isn’t cleaned to “{}”)
>
> # 20205 — PositiveIntegerField
>  (empty string unexpectedly
> passes model validation if blank=True. In this case the user was opting-in
> to model validation.)
>
> ***
>
> For 4—CharField—we could take Simon’s proposal
>  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
> .
>
> 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/4#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
> 
> .
>


-- 
| Raffaele Salmaso
| https://salmaso.org
| https://bitbucket.org/rsalmaso
| https://github.com/rsalmaso

-- 
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/CABgH4JszmWeVtNgwtKB2-JbqOg9ggdGQypzFqToJeoBo%3D-Y8HA%40mail.gmail.com.