How can i update function field on button click. I want to display names of files in a directory on button click. i will get file names in a list . how can i show that in xml using function field ? Any one please help
My xml is
<?xml version="1.0" encoding="utf-8" ?>
<openerp>
<data>
<record id="voip_form_view" model="ir.ui.view">
<field name="name">Voip Details</field>
<field name="model">filedata</field>
<field name="arch" type="xml">
<form string="voip" version="7.0">
<style>.openerp .oe_application
.oe_breadcrumb_title {display:none }</style>
<style>.openerp .oe_view_manager table.
oe_view_manager_header .oe_view_manager_buttons{display:none }
</style>
<button name="get_filenames" type="object" string="List Files" />
</form>
</field>
</record>
<record id="voipdata_tree_view" model="ir.ui.view">
<field name="name">File Details</field>
<field name="model">filedata</field>
<field name="priority" eval="1"/>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="File Names" >
<field name="file_name"/>
<field name="time_created" string="Time Created"/>
<field name="size" string="Size"/>
<field name="file_path"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_voipdata_form">
<field name="name">Voip Details</field>
<field name="res_model">filedata</field>
<field name="view_type">tree</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="voipdata_tree_view"/>
</record>
<record model="ir.actions.act_window" id="action_voip_form">
<field name="name">Voip Details</field>
<field name="res_model">filedata</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="voip_form_view"/>
</record>
<menuitem name="Voip" parent="base.menu_reporting" id="voip_menu_mainform"/>
<menuitem name="Voip" parent="voip_menu_mainform" id="voip_menu_subform"
action="action_voip_form"/>
</data>
</openerp>
My python code is
class filedata(osv.osv):
_name = 'filedata'
_log_access = False
def compute(self, cr, uid, ids, field_names, arg, context):
result = {
2: {'file_name': 'Bob', 'file_path': 'ffff',
'time_created':'2011-06-09','size':'222'}}
return result
_columns = {
'file_name' : fields.function
(compute, type='char', size=50,multi='person_data'),
'file_path' :fields.function
(compute, type='char', size=50,multi='person_data'),
'time_created':fields.function
(compute, type='char', size=50,multi='person_data'),
'size' : fields.function
(compute, type='char', size=50,multi='person_data')
}
def get_filenames(self, cr, uid, ids, context=None):
lst_dirfiles = os.listdir('/voice-recordings')
cr.execute("select id,file_name from filedata")
result = cr.fetchall()
lst_dbfiles = []
for res in result:
file_name = res[1]
if (file_name == None):
cr.execute("delete from filedata where id=%s",(res[0],))
else:
lst_dbfiles.append(file_name)
if lst_dirfiles:
for file_name in lst_dirfiles:
if file_name not in lst_dbfiles:
time_created = time.ctime(os.path.getctime
("/voice-recordings/"+file_name))
size = str(os.path.getsize
("/voice-recordings/"+file_name))+' Bytes'
file_path = "/voice-recordings/"+file_name
file_base64 = ''
file_object = open(file_path, "rb")
file_base64 = base64.b64encode(file_object.read())
file_path = "ftp://test.claudion.com:123/"+file_name
cr.execute("inserit into filedata
(file_name,file_path,time_created,size)
values(%s,%s,%s,%s);",
(file_name,file_path,time_created,size))
return {
'type' : 'ir.actions.act_window',
'name' : 'File Details',
'view_mode' : 'tree',
'view_type' : 'form',
'res_model' : 'filedata',
'context' : context,
}
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Accounting
- Inventory
- PoS
- Project management
- MRP
This question has been flagged
What you want to accomplish is not that easy. Here are some hints for your implementation:
- Use a parent object
filedata
with child objectfiledata.line
filedata
has a function fieldlines
of typeone2many
(relationfiledata.line
)- The compute function then returns the lines which you currently want to return in function
get_filenames
- Keep in mind that the function is called every time you open the view (so performance could be poor with this approach)
Here is another approach:
- Use only one model
filedata
- Put the logic of
get_filenames
into aServer Action
which you call by clicking onto a menu item - The server action then deletes all current records of
filedata
and creates a new entry for every record withself.pool.get('filedata').create
... - This approach only computes on button-click and is much faster when only displaying the data
Hope this helps.
@Andreas Brueck i checked sale/sale.py but i didnt understand anything. Can you please explain it to me
Function fields are automatically updated after a button click. If would help if you post your code in your question.
@Andreas Brueckl I added my code in question.my button calls get_filenames function which should return a view to display file names. In my code i inserted file names in to db in that function and displays it in view,. Now i dont want to save anything in db . that is my issue please help
@Andreas Brueck Any other way to achive this ? Please help !! I have been on this for long time :(. I dnt want to use function field i want to display file name in view and play that mp3 files from there
But i dnt want to save data in db :(
i dnt know abt "Server Action" how use that in menu click. Can you explain to me with my code example
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 | |
---|---|---|---|---|
|
0
Nov 24
|
132 | ||
|
0
Jun 24
|
267 | ||
|
1
Jun 24
|
701 | ||
|
0
Oct 23
|
952 | ||
|
2
Mar 23
|
1488 |