#30216: Document BooleanField is no longer blank=True in Django 2.1+
-----------------------------------------+------------------------
               Reporter:  Ed Morley      |          Owner:  nobody
                   Type:  Uncategorized  |         Status:  new
              Component:  Documentation  |        Version:  2.1
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  1
                  UI/UX:  0              |
-----------------------------------------+------------------------
 Hi!

 In Django 2.1, as part of adding `null` support to `BooleanField`, the
 previously implicit/hardcoded `blank=True` of `BooleanField` was removed:
 
https://github.com/django/django/commit/5fa4f40f45fcdbb7e48489ed3039a314b5c961d0
 #diff-bf776a3b8e5dbfac2432015825ef8afeL995

 In one of our projects, we had a model with a `BooleanField` defined like
 so:

 {{{#!python
 class PerformanceAlert(models.Model):
     id = models.AutoField(primary_key=True)
     # ...
     is_regression = models.BooleanField()
 }}}

 The REST API for that model uses django-rest-framework's
 `ModelSerializer`, which generates validation rules based on the model
 properties.

 In Django 2.0, the d-r-f API serializer's `repr()` is:

 {{{#!python
 PerformanceAlertSerializer():
     id = IntegerField(read_only=True)
     # ...
     is_regression = BooleanField(required=False)
 }}}

 But under Django 2.1 this changed to

 {{{#!python
 PerformanceAlertSerializer():
     id = IntegerField(read_only=True)
     # ...
     is_regression = BooleanField()
 }}}


 As such under Django 2.1 API calls that were previously successful then
 failed with `This field is required.`. (It turned out our API is using
 `PUT`s in places it should really be using `PATCH`.)

 We were able to resolve the issue by adjusting
 `PerformanceAlertSerializer` such that it explicitly configures the field
 with `serializers.BooleanField(required=False)`, however it would be great
 to mention this ~breaking change in the Django 2.1 release notes (and also
 as a "changed in" on the `BooleanField` entry on the fields page) -
 particularly since it looks like several other people have hit the same
 issue:
 
https://github.com/django/django/commit/5fa4f40f45fcdbb7e48489ed3039a314b5c961d0#r30206260
 https://code.djangoproject.com/ticket/29921

 If I get a chance I'll open a PR in the next few weeks, but happy for
 someone to beat me to it.

 Many thanks :-)

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30216>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.4e12fa51cd7ab72669d1a414351351cb%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to