Odoo - create_date字段变成布尔类型?

1 投票
2 回答
2411 浏览
提问于 2025-04-18 15:44

我注意到一件奇怪的事情。我在创建一个计算方法时,需要用到 create_date 字段,但当我尝试使用 strptime 时,出现了错误,提示我使用了 bool 类型的字段,而我需要的是字符串类型。当我从方法中打印出来时,它的输出是 False。但是当我进入数据库,写SQL查询来获取 create_date 时,它却正常显示为日期时间。

更有趣的是,如果我在视图中定义了 create_date,那么它就变成了 str 类型,我在调用打印时可以看到日期时间。有人知道这是故意这样设计的吗(如果是的话,为什么)还是说这是某种错误?

产生这些结果的代码:

from openerp import models, fields
from openerp.api import one, depends

class crm_lead(models.Model):
    _inherit = 'crm.lead'

    stage_deadline = fields.Datetime('Stage Deadline', compute="_compute_stage_deadline")


    @one
    @depends('section_id.stage_config_ids', 'stage_id', 'create_date')
    def _compute_stage_deadline(self):
        print type(self.create_date) #prints 'bool' if this field is not defined in view. Prints 'str'
        self.stage_deadline = datetime.now()

如果我添加这个视图:

<?xml version="1.0"?>
<openerp>
    <data>         
        <!-- CRM Lead Form View  -->
        <record model="ir.ui.view" id="crm_case_form_view_leads_inherit">
        <field name="name">CRM - Leads Form - Inherit</field>
        <field name="model">crm.lead</field>
        <field name="inherit_id" ref="crm.crm_case_form_view_leads"/>
        <field name="arch" type="xml">
            <field name="priority" position="after">
                <field name="create_date" invisible="1"/>
            </field>
        </field>
        </record>        
    </data>
</openerp>

那么 create_date 就变成了 str 类型。如果我删除这个视图,它又会变回 bool 类型。所以如果 create_date 没有在视图中定义,我就无法使用它。

2 个回答

1

如果在视图中有日期字段,但在保存时没有填写(也就是空的),那么在计算方法中使用这个日期时,功能字段会得到一个空字符串。反之,如果视图中根本没有声明这个日期字段,那么它的值会被认为是假的(False)。

1

看起来这个问题和未满足的依赖关系有关。前面提到的两个依赖('section_id.stage_config_ids', 'stage_id')没有被使用,而且出于某种原因,create_date 也被评估为 False。当我把这些依赖去掉后,问题就解决了。

我唯一不明白的是,为什么把那个字段放到视图里后,字段又变回了 str 类型,即使依赖关系是错误的?

撰写回答