使用具有日期时间和日期的域

时间:2018-06-06 09:15:11

标签: python odoo-8 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>

我尝试使用strptimestrftime没有运气。如何在Odoo中完成日期时间/日期过滤?

我已经包含了视图代码。我很抱歉这仍然不是完整的代码。我必须删除与问题无关的不必要的代码。因为如果我包含所有代码,它将是非常长的代码示例。我觉得理解这个问题就足够了。如果您仍然无法理解,请告诉我。

2 个答案:

答案 0 :(得分:2)

你在做什么在这个执行点上没有任何意义所有字段都是空的False或一个对象。

在执行类语句时执行此搜索,因此如果您直接访问属性,则会获得False或datetime类的对象,这与标准日期时间不同。

您可以通过在搜索前打印两个字段值来确认我所说的内容。在这一点上你想要什么,我们可以帮助重写你的代码。

<强>编辑*

Odoo中的日期是一个文本。您正在使用日期字段来查找日期时间我认为Odoo将连接&#39; 00:00:00&#39;为了你的价值。如果您选择相同的日期,则始终会在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在此基础上管理。

答案 1 :(得分:0)

此处存在与日期对象和日期时间对象的不兼容搜索。所以你应该将date_from和date_to设为datetime字段并以相同的格式输入。根据格式的其他日期字段+ 00.0000.00将添加搜索,您将获得[]