mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Fixed #35257 -- Corrected resolving output_field for IntegerField/DecimalField with NULL.
This commit is contained in:
parent
fd2514d17d
commit
6a37e9bfae
@ -5,6 +5,7 @@ import inspect
|
|||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
from itertools import chain
|
||||||
from types import NoneType
|
from types import NoneType
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
@ -597,10 +598,16 @@ _connector_combinations = [
|
|||||||
},
|
},
|
||||||
# Numeric with NULL.
|
# Numeric with NULL.
|
||||||
{
|
{
|
||||||
connector: [
|
connector: list(
|
||||||
(field_type, NoneType, field_type),
|
chain.from_iterable(
|
||||||
(NoneType, field_type, field_type),
|
[(field_type, NoneType, field_type), (NoneType, field_type, field_type)]
|
||||||
]
|
for field_type in (
|
||||||
|
fields.IntegerField,
|
||||||
|
fields.DecimalField,
|
||||||
|
fields.FloatField,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
for connector in (
|
for connector in (
|
||||||
Combinable.ADD,
|
Combinable.ADD,
|
||||||
Combinable.SUB,
|
Combinable.SUB,
|
||||||
@ -609,7 +616,6 @@ _connector_combinations = [
|
|||||||
Combinable.MOD,
|
Combinable.MOD,
|
||||||
Combinable.POW,
|
Combinable.POW,
|
||||||
)
|
)
|
||||||
for field_type in (fields.IntegerField, fields.DecimalField, fields.FloatField)
|
|
||||||
},
|
},
|
||||||
# Date/DateTimeField/DurationField/TimeField.
|
# Date/DateTimeField/DurationField/TimeField.
|
||||||
{
|
{
|
||||||
|
@ -2654,6 +2654,29 @@ class CombinedExpressionTests(SimpleTestCase):
|
|||||||
with self.assertRaisesMessage(FieldError, msg):
|
with self.assertRaisesMessage(FieldError, msg):
|
||||||
expr.output_field
|
expr.output_field
|
||||||
|
|
||||||
|
def test_resolve_output_field_numbers_with_null(self):
|
||||||
|
test_values = [
|
||||||
|
(3.14159, None, FloatField),
|
||||||
|
(None, 3.14159, FloatField),
|
||||||
|
(None, 42, IntegerField),
|
||||||
|
(42, None, IntegerField),
|
||||||
|
(None, Decimal("3.14"), DecimalField),
|
||||||
|
(Decimal("3.14"), None, DecimalField),
|
||||||
|
]
|
||||||
|
connectors = [
|
||||||
|
Combinable.ADD,
|
||||||
|
Combinable.SUB,
|
||||||
|
Combinable.MUL,
|
||||||
|
Combinable.DIV,
|
||||||
|
Combinable.MOD,
|
||||||
|
Combinable.POW,
|
||||||
|
]
|
||||||
|
for lhs, rhs, expected_output_field in test_values:
|
||||||
|
for connector in connectors:
|
||||||
|
with self.subTest(lhs=lhs, connector=connector, rhs=rhs):
|
||||||
|
expr = CombinedExpression(Value(lhs), connector, Value(rhs))
|
||||||
|
self.assertIsInstance(expr.output_field, expected_output_field)
|
||||||
|
|
||||||
def test_resolve_output_field_dates(self):
|
def test_resolve_output_field_dates(self):
|
||||||
tests = [
|
tests = [
|
||||||
# Add - same type.
|
# Add - same type.
|
||||||
|
Loading…
Reference in New Issue
Block a user