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:
- إدارة علاقات العملاء
- e-Commerce
- المحاسبة
- المخزون
- PoS
- Project
- MRP
لقد تم الإبلاغ عن هذا السؤال
2894
أدوات العرض
هل أعجبك النقاش؟ لا تكن مستمعاً فقط. شاركنا!
أنشئ حساباً اليوم لتستمتع بالخصائص الحصرية، وتفاعل مع مجتمعنا الرائع!
تسجيلالمنشورات ذات الصلة | الردود | أدوات العرض | النشاط | |
---|---|---|---|---|
|
1
أغسطس 24
|
1820 | ||
|
2
أبريل 24
|
1315 | ||
|
1
مارس 24
|
1392 | ||
|
1
أبريل 24
|
1708 | ||
How can I recover ownership?
تم الحل
|
|
1
فبراير 23
|
1725 |