[FIX] models: filtered_domain on date/datetime fields
X-original-commit: 5399c139b884f721b92477533eae1e03bf4cf62b
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user