odoo中继承了模型并重写了同名的方法,执行会到子类还是父类
时间: 2024-05-13 08:21:03 浏览: 20
在 Odoo 中,如果一个模型继承了另一个模型并重写了同名的方法,执行时会先到子类中查找该方法,如果子类中不存在该方法,则会到父类中查找该方法。如果父类中也不存在该方法,则会抛出异常。如果子类中重写了父类中的方法,可以通过 super() 方法调用父类中的同名方法。例如:
```python
class MyModel(models.Model):
_inherit = 'my.model'
def my_method(self):
# 重写了同名方法
# 调用父类中的同名方法
res = super(MyModel, self).my_method()
# 在父类方法的基础上做一些处理
return res
```
在上面的例子中,MyModel 继承了 my.model,并重写了同名的方法 my_method。在重写的方法中,调用了父类中的同名方法,并在其基础上做了一些处理。
相关问题
odoo中多个子类有同名的方法,先执行哪个子类的方法
在 Odoo 中,如果多个子类有同名的方法,Odoo 会按照继承的顺序依次执行这些方法。也就是说,如果一个子类继承了另一个子类,那么它会先执行父类的方法,再执行自己的方法。如果有多个子类继承同一个父类,并且这些子类中有同名的方法,那么 Odoo 会按照继承的顺序从上往下执行这些方法。因此,如果您有多个子类有同名的方法,需要根据具体情况来确定执行顺序,以确保程序的正确性。
odoo中查找本模型下字段值为某个数的记录
在Odoo中查找本模型下字段值为某个数的记录,可以使用Odoo ORM的搜索功能。可以使用search()方法来实现此操作。
例如,假设我们有一个模型为"my.model",其中有一个字段名为"my_field",我们想要查找值为10的记录,可以使用以下代码:
```python
my_records = self.env['my.model'].search([('my_field', '=', 10)])
```
这将返回一个Odoo记录集,其中包含所有其"my_field"字段值为10的记录。
在此代码中,我们使用search()方法来搜索"my.model"模型中具有"my_field"字段值为10的记录。我们使用元组来指定搜索条件,第一个元素为字段名,第二个元素为运算符,第三个元素为要搜索的值。
可以使用其他运算符,例如">","<",">=","<=","!="等等。例如,要查找"my_field"字段值大于10的记录,可以使用以下代码:
```python
my_records = self.env['my.model'].search([('my_field', '>', 10)])
```