将域与日期时间和日期一起使用
Using domain with datetime and date
您好,我正在尝试使用这样的域过滤模型
class TableOne(models.Model):
_name = "table.one"
date = fields.Datetime(string="Date", default=fields.Datetime.now)
class ReportOne(models.Model):
_name = "report.one"
date_from = fields.Date(string="From")
date_to = fields.Date(string="To")
def do_some_filtering(self, date_from, date_to):
table_one = self.env["table.one"]
domain = []
domain.append(("date", ">=", date_from ))
domain.append(("date", "<=", date_to ))
recs = table_one.search(domain) // zero results, even though the date_from / date_to range is inside the date spread
<record id="some_view_id" model="ir.ui.view">
<field name="name">some.view.name</field>
<field name="model">report.one</field>
<field name="arch" type="xml">
<form create="false">
<sheet>
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<group string="Date Range">
<field name="date_from" />
<field name="date_to" />
</group>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button string="Create" type="object" name="do_some_filtering" />
</div>
</div>
</div>
</sheet>
</form>
</field>
</record>
我试过使用 strptime
, strftime
没有成功。 datetime/date 在 Odoo 中如何进行过滤?
我已经包含了视图代码。很抱歉,这仍然不是完整的代码。我必须删除与问题无关的不必要的代码。因为如果我包含所有代码,那将是非常长的代码示例。我觉得理解这个问题就足够了。如果还是不明白请告诉我。
这里有一个与 date 对象和 datetime 对象不兼容的搜索。所以你应该将 date_from 和 date_to 设置为日期时间字段并以相同的格式输入。否则日期字段 + 00.0000.00 按照格式将添加到搜索中,你会得到 []
你在这里做什么在那个执行点没有任何意义所有字段都是空的 False 或一个对象。
此搜索是在您执行 class 语句时完成的,因此如果您像这样直接访问属性,您会得到一个 False 或 datetime class 的对象不是像标准的日期时间实验室。
您可以通过在搜索前打印两个字段值来确认我在说什么。在这一点上您想要什么,我们可以帮助重写您的代码。
编辑*
Odoo 中的日期是文本。您正在使用日期字段来查找日期时间我认为 Odoo 会将“00:00:00”连接到您的值。如果您选择相同的日期,将始终有准确日期为 hout 00:00:00
.
的记录
您可以更改您的值
[.... '=>', self.from_date + ' 00:00:00'),
...., self.to_date + ' 23:59:59')]
请记住,odoo 处理时区假设您所在的地区是 GMT + 1,如果您在数据库中选择 2018-01-01 00:00:00
,则该值将转换为 2017-12-31 23:00:00
,请注意这一事实Odoo 是一个国际系统,日期时间由 Odoo 在此基础上管理。
您好,我正在尝试使用这样的域过滤模型
class TableOne(models.Model):
_name = "table.one"
date = fields.Datetime(string="Date", default=fields.Datetime.now)
class ReportOne(models.Model):
_name = "report.one"
date_from = fields.Date(string="From")
date_to = fields.Date(string="To")
def do_some_filtering(self, date_from, date_to):
table_one = self.env["table.one"]
domain = []
domain.append(("date", ">=", date_from ))
domain.append(("date", "<=", date_to ))
recs = table_one.search(domain) // zero results, even though the date_from / date_to range is inside the date spread
<record id="some_view_id" model="ir.ui.view">
<field name="name">some.view.name</field>
<field name="model">report.one</field>
<field name="arch" type="xml">
<form create="false">
<sheet>
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<group string="Date Range">
<field name="date_from" />
<field name="date_to" />
</group>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button string="Create" type="object" name="do_some_filtering" />
</div>
</div>
</div>
</sheet>
</form>
</field>
</record>
我试过使用 strptime
, strftime
没有成功。 datetime/date 在 Odoo 中如何进行过滤?
我已经包含了视图代码。很抱歉,这仍然不是完整的代码。我必须删除与问题无关的不必要的代码。因为如果我包含所有代码,那将是非常长的代码示例。我觉得理解这个问题就足够了。如果还是不明白请告诉我。
这里有一个与 date 对象和 datetime 对象不兼容的搜索。所以你应该将 date_from 和 date_to 设置为日期时间字段并以相同的格式输入。否则日期字段 + 00.0000.00 按照格式将添加到搜索中,你会得到 []
你在这里做什么在那个执行点没有任何意义所有字段都是空的 False 或一个对象。
此搜索是在您执行 class 语句时完成的,因此如果您像这样直接访问属性,您会得到一个 False 或 datetime class 的对象不是像标准的日期时间实验室。
您可以通过在搜索前打印两个字段值来确认我在说什么。在这一点上您想要什么,我们可以帮助重写您的代码。
编辑*
Odoo 中的日期是文本。您正在使用日期字段来查找日期时间我认为 Odoo 会将“00:00:00”连接到您的值。如果您选择相同的日期,将始终有准确日期为 hout 00:00:00
.
您可以更改您的值
[.... '=>', self.from_date + ' 00:00:00'),
...., self.to_date + ' 23:59:59')]
请记住,odoo 处理时区假设您所在的地区是 GMT + 1,如果您在数据库中选择 2018-01-01 00:00:00
,则该值将转换为 2017-12-31 23:00:00
,请注意这一事实Odoo 是一个国际系统,日期时间由 Odoo 在此基础上管理。