İçereği Atla
Menü
Bu soru işaretlendi
3 Cevaplar
3638 Görünümler

I want to add expense module lines in website form.

Avatar
Vazgeç
En İyi Yanıt

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




Avatar
Vazgeç
En İyi Yanıt

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.

Avatar
Vazgeç
En İyi Yanıt

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

Avatar
Vazgeç
İlgili Gönderiler Cevaplar Görünümler Aktivite
0
Eyl 22
162
4
Mar 24
5149
1
Mar 24
1702
1
Eyl 22
3827
2
Tem 22
2384