跳至內容
選單
此問題已被標幟
3 回覆
3639 瀏覽次數

I want to add expense module lines in website form.

頭像
捨棄
最佳答案

Create a website template to display the form:

odoo
data
template id="my_model_website_template" name="My Model Website Template" inherit_id="website.layout"
xpath expr="//main" position="inside"
div class="container"
form id="my_model_form" class="s_website_form" method="post" action="/my_model/submit"
t t-call="my_model_website_form_view" /
button type="submit">Submit /form
/div
/xpath
/template
/data


Create a controller to handle the form submission:
from odoo import http
from odoo.http import request

class MyModelController(http.Controller):

@http.route('/my_model/submit', type='http', auth="public", website=True, methods=['POST'])
def submit_form(self, **post):
model = request.env['my.model']
values = {
'name': post.get('name'),
'lines': [(0, 0, {'name': line}) for line in post.getlist('lines')],
}
model.create(values)
return request.redirect('/')

Include the website template in the website layout:
odoo>
template id="website_layout" inherit_id="website.layout"
xpath expr="//main" position="inside"
t t-call="my_model_website_template" /
/xpath
/template
/odoo




頭像
捨棄
最佳答案

One way to do this is by creating a table in the website then calling a custom method defined in your model via rpc query. In the custom function, you should search for the one2many lines and return it. Then back in Js side you iterate the result returned by the query and fill up the table.

頭像
捨棄
最佳答案

Hi,

You need to create a controller and pass the values to the rendered template. 
In the template, you can loop it using for-each.

Eg: 

<t t-foreach="//passed value" t-as="value">
       <t t-esc="value"/> 
</t>


Regards

頭像
捨棄
相關帖文 回覆 瀏覽次數 活動
0
9月 22
162
4
3月 24
5151
1
3月 24
1702
1
9月 22
3827
2
7月 22
2384