如何通过控制器从网站odoo 12中选择下拉列表将数据保存到后端?
how to save a data to backend thrhough controller from selecting a dropdown list in the website odoo 12?
我一直在尝试从下拉列表中获取用户输入并通过 controller.i 将其更新到后端将在下面解释我的代码,
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')
我担心的是我不知道如何将输入 class 提供给 <select>
<option>
下拉列表并使其在用户单击时通过控制器保存到后端名为 save
的按钮
这取决于您如何通过 JS 或控制器呈现视图。
您应该以任何方式将 hr.blood_group 作为字典,例如 - {'o+':"O+",..}
然后你可以用下面的代码替换选项。
<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>
这是我可以提供的基本参考,如果您有任何疑问,请在下方评论。
此外,我正在添加来自网站的参考 link,请看一下。
我一直在尝试从下拉列表中获取用户输入并通过 controller.i 将其更新到后端将在下面解释我的代码,
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')
我担心的是我不知道如何将输入 class 提供给 <select>
<option>
下拉列表并使其在用户单击时通过控制器保存到后端名为 save
这取决于您如何通过 JS 或控制器呈现视图。
您应该以任何方式将 hr.blood_group 作为字典,例如 - {'o+':"O+",..}
然后你可以用下面的代码替换选项。
<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>
这是我可以提供的基本参考,如果您有任何疑问,请在下方评论。
此外,我正在添加来自网站的参考 link,请看一下。