[FIX] models: filtered_domain on date/datetime fields

X-original-commit: 5399c139b884f721b92477533eae1e03bf4cf62b
This commit is contained in:
Raphael Collet
2019-10-21 09:08:47 +00:00
committed by fw-bot
parent c2e645f45f
commit bb9952cff2
3 changed files with 43 additions and 4 deletions
+1
View File
@@ -297,6 +297,7 @@ class MixedModel(models.Model):
number = fields.Float(digits=(10, 2), default=3.14)
number2 = fields.Float(digits='New API Precision')
date = fields.Date()
moment = fields.Datetime()
now = fields.Datetime(compute='_compute_now')
lang = fields.Selection(string='Language', selection='_get_lang')
reference = fields.Reference(string='Related Document',
@@ -577,9 +577,41 @@ class TestFields(common.TransactionCase):
with self.assertRaises(ValueError):
record.date = '12-5-1'
# check filtered_domain
self.assertTrue(record.filtered_domain([('date', '<', '2012-05-02')]))
self.assertTrue(record.filtered_domain([('date', '<', date(2012, 5, 2))]))
self.assertTrue(record.filtered_domain([('date', '<', datetime(2012, 5, 2, 12, 0, 0))]))
def test_21_datetime(self):
""" test datetime fields """
for i in range(0, 10):
self.assertEqual(fields.Datetime.now().microsecond, 0)
record = self.env['test_new_api.mixed'].create({})
# assign falsy value
record.moment = None
self.assertFalse(record.moment)
# assign string
record.moment = '2012-05-01'
self.assertEqual(record.moment, datetime(2012, 5, 1))
record.moment = '2012-05-01 06:00:00'
self.assertEqual(record.moment, datetime(2012, 5, 1, 6))
with self.assertRaises(ValueError):
record.moment = '12-5-1'
# assign date or datetime
record.moment = date(2012, 5, 1)
self.assertEqual(record.moment, datetime(2012, 5, 1))
record.moment = datetime(2012, 5, 1, 6)
self.assertEqual(record.moment, datetime(2012, 5, 1, 6))
# check filtered_domain
self.assertTrue(record.filtered_domain([('moment', '<', '2012-05-02')]))
self.assertTrue(record.filtered_domain([('moment', '<', date(2012, 5, 2))]))
self.assertTrue(record.filtered_domain([('moment', '<', datetime(2012, 5, 1, 12, 0, 0))]))
def test_21_date_datetime_helpers(self):
""" test date/datetime fields helpers """
_date = fields.Date.from_string("2077-10-23")
+10 -4
View File
@@ -5133,9 +5133,15 @@ Record ids: %(records)s
else:
data = data and data.ids or [False]
else:
data = [
(isinstance(x, datetime.date) and x.strftime('%Y-%m-%d %H:%M:%S')) or
x for x in data]
true_data = next((d for d in data if d), None)
if isinstance(true_data, datetime.date):
# convert all date and datetime values to datetime
normalize = Datetime.to_datetime
if isinstance(value, (list, tuple)):
value = [normalize(v) for v in value]
else:
value = normalize(value)
data = [normalize(d) for d in data]
if comparator in ('in', 'not in'):
if not (isinstance(value, list) or isinstance(value, tuple)):
value = [value]
@@ -6100,4 +6106,4 @@ def lazy_name_get(self):
# keep those imports here to avoid dependency cycle errors
from .osv import expression
from .fields import Field
from .fields import Field, Datetime