[Django] #30216: Document BooleanField is no longer blank=True in Django 2.1+

9 views
Skip to first unread message

Django

unread,
Feb 26, 2019, 6:21:54 AM2/26/19
to django-...@googlegroups.com
#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.

Django

unread,
Feb 26, 2019, 8:31:28 AM2/26/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------+----------------------------------------
Reporter: Ed Morley | Owner: Darius Azimi
Type: Uncategorized | Status: assigned
Component: Documentation | Version: 2.1
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------+----------------------------------------
Changes (by Darius Azimi):

* owner: nobody => Darius Azimi
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:1>

Django

unread,
Feb 26, 2019, 8:37:10 AM2/26/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------+--------------------------------------
Reporter: Ed Morley | Owner: (none)

Type: Uncategorized | Status: new
Component: Documentation | Version: 2.1
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------+--------------------------------------
Changes (by Darius Azimi):

* owner: Darius Azimi => (none)
* status: assigned => new


--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:2>

Django

unread,
Feb 26, 2019, 9:27:46 AM2/26/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
--------------------------------------+------------------------------------

Reporter: Ed Morley | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Documentation | Version: 2.1
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by Tim Graham):

* type: Uncategorized => Cleanup/optimization
* easy: 1 => 0
* stage: Unreviewed => Accepted


Comment:

I'm not sure what the note would say exactly. Is
"`BooleanField.__init__()` no longer sets `blank=True`." enough? It
doesn't seem to give much explanation about possible ramifications of the
change and it's not Django's place to describe how django-rest-framework
is affected. This behavior isn't documented in `ref/models/fields.txt`,
and we normally don't include a versionchanged annotation for something
that's undocumented.

--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:1>

Django

unread,
Mar 12, 2019, 5:58:13 AM3/12/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
--------------------------------------+------------------------------------
Reporter: Ed Morley | Owner: sejd0n
Type: Cleanup/optimization | Status: assigned
Component: Documentation | Version: 2.1

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by sejd0n):

* owner: nobody => sejd0n


* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:2>

Django

unread,
Sep 26, 2019, 3:18:16 PM9/26/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------------+-------------------------------------
Reporter: Ed Morley | Owner: David Vaz
Type: | Status: assigned
Cleanup/optimization |
Component: Documentation | Version: 2.1

Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by David Vaz):

* owner: nobody => David Vaz


* status: new => assigned


Comment:

submited a [https://github.com/django/django/pull/11826 PR]

Django

unread,
Sep 27, 2019, 7:01:37 AM9/27/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------------+-------------------------------------
Reporter: Ed Morley | Owner: David Vaz
Type: | Status: closed
Cleanup/optimization |
Component: Documentation | Version: 2.1
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"a6972e88547ad5a51592f2b6d5046754c4b59394" a6972e88]:
{{{
#!CommitTicketReference repository=""
revision="a6972e88547ad5a51592f2b6d5046754c4b59394"
[2.2.x] Fixed #30216 -- Doc'd that BooleanField is no longer blank=True in
Django 2.1.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:3>

Django

unread,
Sep 27, 2019, 7:03:47 AM9/27/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------------+-------------------------------------
Reporter: Ed Morley | Owner: David Vaz
Type: | Status: closed
Cleanup/optimization |
Component: Documentation | Version: 2.1

Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Mariusz Felisiak <felisiak.mariusz@…>):

In [changeset:"1556a67c65c336ab12961c6123b129ac10e729b8" 1556a67c]:
{{{
#!CommitTicketReference repository=""
revision="1556a67c65c336ab12961c6123b129ac10e729b8"
[2.1.x] Fixed #30216 -- Doc'd that BooleanField is no longer blank=True in
Django 2.1.

Backport of a6972e88547ad5a51592f2b6d5046754c4b59394 from stable/2.2.x
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:4>

Django

unread,
Sep 27, 2019, 7:19:59 AM9/27/19
to django-...@googlegroups.com
#30216: Document BooleanField is no longer blank=True in Django 2.1+
-------------------------------------+-------------------------------------
Reporter: Ed Morley | Owner: David Vaz
Type: | Status: closed
Cleanup/optimization |
Component: Documentation | Version: 2.1

Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/30216#comment:5>

Reply all
Reply to author
Forward
0 new messages