Ive been trying to take a user input from the dropdown list and update it to the backend through controller.i will explain my code below,
JS
$(document).ready(function() {
$(".form-group input").hide() //hide inputs
$(".edit_save").click(function() {
var selector = $(this).closest(".form-group")
var btnText = $(this).text();
if (btnText === 'Edit') {
$(this).text('Save');
$(this).next("button").show(); //hide
selector.find("form span").hide() //span hide
selector.find("form input").show() //show inputs
} else {
$(this).text('Edit');
$(this).next("button").hide();
selector.find("form span").show()
selector.find("form input").hide()
var blood_group = document.getElementById("blood_group").value;
ajax.jsonRpc("/my/health-record-save", 'call', {
'sex': sex,
});
selector.find("span.blood_group").text(blood_group)
}
});
XML
<div class="form-group">
<form class="form-horizontal" style="bg-light">
<t>
<button type="button" class="edit_save">Edit</button>
<button class="cancel" type="button" style="display:none">Cancel</button>
</t>
<div class="col-md text-md-left" style="padding-top:10px">
<label class="text-secondary" for="blood_group"><strong>Blood group:</strong></label>
<select name="blood_group" id="blood_group">
<option>
<t t-esc ="hr.blood_group"/>
</option>
<option value="o+">O+</option>
<option value="o-">O-</option>
<option value="a+">A+</option>
<option value="a-">A-</option>
<option value="b-">B-</option>
<option value="b+">B+</option>
<option value="ab+">AB+</option>
<option value="ab-">AB-</option>
</select>
</div>
</form>
</div>
controller.py
@http.route(['/my/health-record-save'], type='json', auth="public", website=True)
def portal_save_health_record(self, **kw):
health_record_id = kw.get('h_record')
blood_group = kw.get('blood_group')
health_record = request.env['health.record'].search([('id', '=', health_record_id)])
health_record.write({
'blood_group': blood_group,
})
return request.redirect('/my/health-record')
What my concern is i dont know how to give the input class to <select>
<option>
dropdown list and make it to save to the backend through controller when the user click the button named save
It's based on how you are render the view through- JS or controller.
Any way you should get hr.blood_group as a dictionary like - {'o+':"O+",..}
then you can replace the option as below code.
<t t-set="blood_group" t-value="hr.blood_group"/>
<option t-foreach="blood_group" t-as="bgroup" t-att-value="bgroup">
<t t-esc="blood_group[bgroup]"/>
</option>
This is the base reference I can give, if you have any queries comment below.
Also, I'm adding a reference link from the website, take a look at it.