Openerp 有效地显示自。。。在奥多
考虑以下效率问题:Openerp 有效地显示自。。。在奥多,openerp,odoo-8,openerp-8,Openerp,Odoo 8,Openerp 8,考虑以下效率问题: some_date = fields.Date(default="1999-01-01") days_since_some_date = fields.Integer(compute='_compute_days') @api.multi def _compute_days(self): today = datetime.datetime.now().date() for r in self: r.days_since_some_date
some_date = fields.Date(default="1999-01-01")
days_since_some_date = fields.Integer(compute='_compute_days')
@api.multi
def _compute_days(self):
today = datetime.datetime.now().date()
for r in self:
r.days_since_some_date = (today - datetime.datetime.strptime(r.some_date, '%Y-%m-%d').days
如果在某个对象的树状视图中显示自某个日期起的天数,则每次刷新时都会重新计算该值,并且在任何给定的一天中,该值几乎不会更改。也就是说,该值每天递增一,只有在手动更改some_date字段中的日期时,该值才会更改
理想情况下,人们希望避免在每次刷新时重新计算此值,但不能将其存储,因为这样它就不会每天递增。类似地,它不仅仅依赖于some_date字段,使其成为既依赖于当前日期又依赖于some_date字段的混合体
问题是,绑定到Odoo框架的人如何才能拥有这样一个字段,而不会触发对大型记录集的不必要维护
其他想法
您可以使用
ir.cron
模型的自动操作,其行为类似于linux cron作业
基本上你的案子会有这样的东西
<openerp>
<data noupdate="1">
<record id="ir_cron_date" model="ir.cron">
<field name="name">Date cron job</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="True" name="doall"/>
<field eval="'your.model'" name="model"/>
<field eval="'date_cron_function'" name="function"/>
</record>
</data>
</openerp>
日期cron作业
1.
天
-1
尽管文档中没有说明如何使用它
作为一个小参考
我在文件里什么地方都找不到
我个人认为,无论何时加载表单,重新计算日期对python、odoo或服务器来说都不是一项昂贵的操作,这是一种过分的做法。您可以使用
ir.cron
模型的自动操作,其行为类似于linux cron作业
基本上你的案子会有这样的东西
<openerp>
<data noupdate="1">
<record id="ir_cron_date" model="ir.cron">
<field name="name">Date cron job</field>
<field name="user_id" ref="base.user_root"/>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field eval="True" name="doall"/>
<field eval="'your.model'" name="model"/>
<field eval="'date_cron_function'" name="function"/>
</record>
</data>
</openerp>
日期cron作业
1.
天
-1
尽管文档中没有说明如何使用它
作为一个小参考
我在文件里什么地方都找不到
我个人认为,无论何时加载表单,重新计算日期对python、odoo或服务器来说都不是一项昂贵的操作。将计算包含在(每天一次)cron作业中肯定会有助于每日增量,但是,我是否能够使计算函数同时依赖于“某个日期”,以便在该字段发生更改时它也会立即更新?是的,您可以使用docorator
@api.onchange(“某个日期”)
,无论何时更改字段,您都可以手动重新计算并增加日期onchange是否仅编辑字段以在UI中显示?使用@api.depends不是更合适吗?是的,你是对的,我的意思是说@api.depends
。更合适的是,如果通过表单(保存时)或另一个模型中的其他计算更改了some_date
的值,则会触发它。另一方面,@api.onchange
仅在通过该模型中的表单(包括a中的计算)更改字段时才会更改(每天一次)cron job当然有助于每日增量,但我是否能够使计算函数同时依赖于“某个日期”,以便在该字段更改时也立即更新?是的,您可以使用docorator@api.onchange(“某个日期”)
,无论何时更改字段,您都可以手动重新计算并增加日期onchange是否仅编辑字段以在UI中显示?使用@api.depends不是更合适吗?是的,你是对的,我的意思是说@api.depends
。更为恰当的是,如果通过表单(保存时)或其他模型中的其他计算更改了some_date
的值,则会触发它。另一方面,@api.onchange
仅在通过该模型中的表单更改字段时才会被更改