如何对计算域建模

How to model computed fields

我需要创建带有出生日期字段的人物模型。我没有把从出生日期算起人的年龄的逻辑。

我必须在哪里导入 python 的 datetime 以便在计算字段中使用?如果我尝试调用 datetime 函数,Odoo 会给我未定义的错误。

这是我的看法

<record model="ir.actions.act_window" id="person_list_action">
    <field name="name">Person</field>
    <field name="res_model">earth.person</field>
    <field name="view_type">form</field>
    <field name="view_mode">tree,form</field>
    <field name="help" type="html">
        <p class="oe_view_nocontent_create">Create the first person
        </p>
    </field>
</record>

<record model="ir.ui.view" id="person_tree_view">
    <field name="name">person.tree</field>
    <field name="model">earth.person</field>
    <field name="arch" type="xml">
        <tree string="Person Tree">
            <field name="first_name"/>
            <field name="last_name"/>
            <field name="date_of_birth"/>
            <field name="age"/>
        </tree>
    </field>
</record>

这是我的模型

class Person(models.Model):
    _name = 'earth.person'

    first_name = fields.Char(string="First Name", required=True)
    last_name = fields.Char(string="Last Name")
    date_of_birth = fields.Date()
    age = fields.Integer(compute='_compute_person_age')

    @api.depends('date_of_birth')
    def _compute_person_age(self):
        for record in self:
            record.age = 30

这是根据生日计算年龄的正确代码

    from datetime import datetime, date     
    class Person(models.Model):
   _name = 'earth.person'

   first_name = fields.Char(string="First Name", required=True)
   last_name = fields.Char(string="Last Name")
   date_of_birth = fields.Date()
   age = fields.Integer(compute='_compute_person_age')

   @api.depends('date_of_birth')
   def _compute_person_age(self):
    today = date.today() 
    for record in self:
      if record.date_of_birth:
          born = datetime.strptime(record.date_of_birth,"%Y-%m-%d") 
          record.age = today.year - born.year - ((today.month, today.day) < (born.month, born.day))