#32966 closed Bug (fixed)
Time-related _check_fix_default_value() methods can be optimized / simplified and have a bug
| Reported by: | Chris Jerdonek | Owned by: | Chris Jerdonek |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I noticed that three of the _check_fix_default_value() method definitions in django/db/models/fields/__init__.py can be simplified. Here is one of them: https://github.com/django/django/blob/fe074c96a343530beea50fbdd0803d3e7b739e8e/django/db/models/fields/__init__.py#L1156-L1167
For example, in each of them, timezone.now() is called even when the return value isn't needed / won't be used.
Change History (11)
comment:1 by , 4 years ago
| Summary: | time-related _check_fix_default_value() methods can be simplified → time-related _check_fix_default_value() methods can be optimized / simplified |
|---|
comment:2 by , 4 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:3 by , 4 years ago
| Type: | Cleanup/optimization → Bug |
|---|
comment:5 by , 4 years ago
| Summary: | time-related _check_fix_default_value() methods can be optimized / simplified → Time-related _check_fix_default_value() methods can be optimized / simplified and have a bug |
|---|
comment:6 by , 4 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
comment:11 by , 4 years ago
For future reference, it turns out the bug fixed by this ticket was previously mentioned here, but never opened as a separate ticket: https://code.djangoproject.com/ticket/21905#comment:19
When I started looking at this, I noticed there is a bug on this line:
https://github.com/django/django/blob/fe074c96a343530beea50fbdd0803d3e7b739e8e/django/db/models/fields/__init__.py#L2216
It can be triggered by the following when
USE_TZ = True:It results in:
Traceback (most recent call last): File "<console>", line 1, in <module> File "/.../django/db/models/fields/__init__.py", line 1112, in check *self._check_fix_default_value(), File "/.../django/db/models/fields/__init__.py", line 2220, in _check_fix_default_value if lower <= value <= upper: TypeError: '<=' not supported between instances of 'datetime.datetime' and 'datetime.time'This case is not covered in the tests here:
https://github.com/django/django/blob/fe074c96a343530beea50fbdd0803d3e7b739e8e/tests/invalid_models_tests/test_ordinary_fields.py#L743-L750