I have a use case where I need to create columns in the table. I'll be receiving column name and column type in my controller and using that I have to create columns in the table. I didn't find any standard method of doing it. So, I created them using raw sql, but odoo ORM was recognizing those columns so Somehow I managed to update the ORM about the columns that I have added but ORM is not reading or writing on those columns. What I need to do in order to read or write in those columns using ORM?
Here is my code:
from odoo import models, fields, api, registry, SUPERUSER_ID, sql_db, http, tools
import json
import odoo
import uuid
import time
class MachineDataController(http.Controller):
@http.route('/machine_module/js_function', type='json', auth='public')
def js_function(self, **kwargs):
# Get the request data and parse it as JSON
request_data = http.request.httprequest.get_data()
request_data = json.loads(request_data.decode('utf-8'))
var1 = request_data.get('var1')
create_dynamic_column(var1, 'char')
return {"message": "Python function executed successfully"}
def create_dynamic_column(column_name, column_type):
print("SQL RAN")
table_name = 'machine_data'
# Get the database cursor
cr = sql_db.db_connect('nishat_odoo_db').cursor()
alter_table_query = f"ALTER TABLE {table_name} ADD COLUMN {column_name} {column_type}"
cr.execute(alter_table_query)
# Update the ir.model.fields table
insert_field_query = f"""
INSERT INTO ir_model_fields (name, field_description, ttype, model, model_id, state)
VALUES (%s, %s, %s, %s, (SELECT id FROM ir_model WHERE model = %s), 'manual')
"""
field_description_json = json.dumps(column_name)
cr.execute(insert_field_query, (column_name, field_description_json, column_type.lower(), 'machine.data', 'machine.data'))
cr.commit()
cr.close()
class MachineDetailss(models.Model):
_name = "machine.data"
_inherit = ["mail.thread", "mail.activity.mixin"]
_description = "Machines Data"
machineName = fields.Char(string='Machine Name', tracking=True)
ppLotNum = fields.Char(string='PP Lot Num', tracking=True)
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Accounting
- Inventory
- PoS
- Project
- MRP
This question has been flagged
2995
Views
Enjoying the discussion? Don't just read, join in!
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign upRelated Posts | Replies | Views | Activity | |
---|---|---|---|---|
|
1
Aug 24
|
2063 | ||
|
2
Apr 24
|
1403 | ||
|
1
Mar 24
|
1565 | ||
|
1
Apr 24
|
1848 | ||
How can I recover ownership?
Solved
|
|
1
Feb 23
|
1882 |