【问题标题】:how to save a data to backend thrhough controller from selecting a dropdown list in the website odoo 12?如何通过控制器从 odoo 12 网站中选择下拉列表将数据保存到后端?
【发布时间】:2020-12-06 18:01:48
【问题描述】:

我一直在尝试从下拉列表中获取用户输入并通过控制器将其更新到后端。我将在下面解释我的代码,

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')

我担心的是我不知道如何将输入类提供给&lt;select&gt;&lt;option&gt;下拉列表,并在用户单击名为save的按钮时通过控制器将其保存到后端

【问题讨论】:

    标签: javascript xml odoo


    【解决方案1】:

    这取决于您通过 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>
    

    这是我可以提供的基本参考,如果您有任何疑问,请在下方评论。

    另外,我正在添加来自网站的参考链接,看看它。

    https://github.com/odoo/odoo/blob/7ddf36474596ec5213aba7b892c1a62998c99da9/addons/website/static/src/xml/website.contentMenu.xml#L28

    【讨论】:

    • 感谢分享知识,不胜感激。
    • 请分享
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多