How to Implement hasattrs & getattrs in Odoo?
In Odoo development, we often deal with dynamic models and objects. Python built-in functions `hasattr()` and `getattr()` help us safely access attributes without raising errors.
1. hasattr()
`hasattr(object, name)` checks whether the given object has an attribute with the specified name.
Returns:
- `True` if the attribute exists
- `False` otherwise
Example: Using hasattr() in Odoo
Assume we are working with different models, and we want to perform an operation only if a specific field exists:
if hasattr(record, 'email'):
print('Email:', record.email)
else:
print('No email field found')
2. getattr()
`getattr(object, name[, default])` is used to retrieve the value of the specified attribute. If the attribute does not exist, it raises an `AttributeError` unless a default value is provided.
Example: Using getattr() in Odoo
We want to access an attribute dynamically (based on user input or configuration):
field_name = 'email'
email_value = getattr(record, field_name, 'Not Available')
print('Email:', email_value)
Combined Use Case in Odoo
These functions are very helpful when writing generic code across models or handling optional fields:
def print_attribute(record, field):
if hasattr(record, field):
print(f"{field}: {getattr(record, field)}")
else:
print(f"{field} not found on record of model {record._name}")
Conclusion
`hasattr()` and `getattr()` are essential tools for writing flexible, error-free, and dynamic code in Odoo. They allow developers to check and retrieve fields on models at runtime, making the code adaptable to changes.