This question has been flagged
1 Reply
7182 Views

I have a new field in product.template:

'abonnement': fields.many2one('product.template', 'product_id', selected=True)

Now I want to make something like this:


<div t-attf-class="form-group #{error.get('country_id') and 'has-error' or ''} col-lg-6">
<label class="control-label" for="country_id">Country</label>
<select name="country_id" class="form-control">
<option value="">Country...</option>
<t t-foreach="countries or []" t-as="country">
<option t-att-value="country.id" t-att-selected="country.id == partner.country_id.id">
<t t-esc="country.name" />
</option>
</t>
</select>
</div>


My code doesn't work at all:


<template id="products_followup" name="test">
<t t-call="website.layout">
<t t-set="additional_title">test Details</t>
<div id="wrap">
<div class="container">
<div class="row">
<div class="col-sm-6">
<ol class="breadcrumb mt8">
<li><a href="/my/home">My Account</a></li>
<li><span t-esc="product.name"/></li>
</ol>
</div>
</div>
<h1>Inserat Bearbeiten</h1>
<form t-attf-action="/my/test/#{product.id}" method="post" enctype="multipart/form-data">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="row o_website_portal_details">
<div class="col-md-8">
<div class="row">
<div t-attf-class="form-group">
<label class="control-label" for="abonnement">Abo</label>
<select name="abonnement" class="form-control">
<option value="">Abo...</option>
<t t-foreach="abonnements or []" t-as="abo">
<option t-att-value="abo.id" t-att-selected="abo.id == product.abonnement.id">
<t t-esc="abo.name" />
</option>
</t>
</select>
</div>
<div class="clearfix">
<button type="submit" class="btn btn-default btn-primary pull-right mb32 ">
Speichern
<span class="fa fa-long-arrow-right" />
</button>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</t>
</template>


Have someone an idea why my code isn't working right?

I want a selection of my products.

This is my controller:

@http.route(['/my/test/<int:product>'], type='http', auth="user", website=True)
def products_followup(self, product=None, redirect=None, **post):
product = request.env['product.template'].browse([product])
try:
product.check_access_rights('read')
product.check_access_rule('read')
except AccessError:
return request.website.render("website.403")
values = {
'error': {},
'error_message': [],
}
if post:
vals = {}
product.sudo().write(post)
values.update(post)
abonnements = request.env['product.template'].sudo().search([])

values.update({
'product': product,
'abonnements': abonnements,
'redirect': redirect,
})
if redirect:
return request.redirect(redirect)
return request.redirect('/my/home')


return request.website.render("website_portal_sale.products_followup", {
'product': product.sudo(),
})


Avatar
Discard
Best Answer

Hello,

First of all, you try to iterate over abonnement, while it is not a list. If you want to show this field for each product, you should iterate over products.

<label class="control-label" for="product.abonnement">Country</label>
<select name="abonnement" class="form-control">
<option value="">Country...</option>
<t t-foreach="product_ids or []" t-as="a">
<option t-att-value="a.abonnement.id" t-att-selected="a.abonnement.id == product.abonnement.id">
<t t-esc="a.abonnement.name" />
</option>
</t>
</select>
</div>

Second of all, are you sure you transfer this abonnement via a controller? What does an error says?

Avatar
Discard
Author

I only transfer it with that in the controller:

product = request.env['product.template'].browse([product])

try:

product.check_access_rights('read')

product.check_access_rule('read')

except AccessError:

return request.website.render("website.403")

And where is the template rendering? I guess, you are using a standard one. That's why there is no value for abonnement, but I guess there is 'product_ids' or 'products'. Thus just iterate over them

Author

I don't get it, I have updated my question with the real code...