如何允许匿名用户使用某种表单? - Odoo 10

时间:2017-05-26 14:57:49

标签: openerp odoo-10

我需要允许匿名用户使用某种形式,以便他们可以注册一些数据。有可能吗?我该怎么办呢?

我正在做的是扩展群发邮件模块,以便向特定于我的组织的某种联系人发送电子邮件。我创建了一个表单,我可以在其中注册联系信息(例如:姓名,电子邮件,联系人感兴趣的主题)。我需要的是,未经身份验证的用户可以使用他的信息填写此表单,以便将新闻稿发送给他。我已经尝试将模型权限设置为base.group_public但我仍然可以获得登录表单。

由于

1 个答案:

答案 0 :(得分:0)

经过大量调查后,我按照这个程序进行了这项工作。

  1. 我安装了网站模块以及Portal模块。

  2. 我创建了一个继承网站布局的模板(这会创建一个'公共表单')。

  3. 我创建了一个控制器,使用模板中的参数创建模型。

  4. 模板的代码是:

    <template id="register">
    <t t-call="iica_contacts.layout">
      <t t-set="title">Register</t>
      <link href="/iica_contacts/static/libraries/js/multi_select/css/multi-select.css" media="screen" rel="stylesheet" type="text/css"/>
      <form action="/contact/register" method="post" data-model_name="iica_contacts.contact" id="registration-form">
        <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
        <div class="container margin-top-20">
            <div class="row">
              <div class="col-md-6 form-group o_website_form_required_custom">
                <label for="name" class="control-label">Full name:</label>
                <input type="text" name="name" class="form-control" data-validation="required" t-att-value="name or contact.name" />
              </div>
            </div>
            <div class="row">
              <div class="col-md-6">
                <div class="panel panel-default">
                  <div class="panel-heading">Contact information</div>
                  <div class="panel-body">
                    <div class="row">
                      <div class="col-md-12 form-group o_website_form_required_custom">
                        <label class="control-label" for="email">Email:</label>
                        <input type="email" name="email" class="form-control" data-validation="required,email" t-att-value="email or contact.email" />
                      </div>
                    </div>
                    <div class="row">
                      <div class="col-md-12 form-group">
                        <label class="control-label" for="phone">Phone number:</label>
                        <input type="tel" name="phone" class="form-control" t-att-value="phone or contact.phone" />
                      </div>
                    </div>
                    <div class="row">
                      <div class="col-md-12 form-group o_website_form_required_custom">
                        <label class="control-label" for="language">Language:</label>
                        <select name="language" class="form-control" data-validation="required">
                          <option value=""> -- Select language -- </option>
                          <option value="1" t-att-selected="1 == language">Spanish</option>
                          <option value="2" t-att-selected="2 == language">English</option>
                        </select>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
              <div class="col-md-6">
                <div class="panel panel-default">
                  <div class="panel-heading">Location information</div>
                  <div class="panel-body">
                    <div class="row">
                      <div class="col-md-12 form-group o_website_form_required_custom">
                        <label class="control-label" for="country_id">Country:</label>
                        <select name="country_id" class="form-control" data-validation="required">
                          <option value=""> -- Select country -- </option>
                          <t t-foreach="countries" t-as="country">
                            <option t-att-value="country.id" t-att-selected="country.id == contact.country_id.id">
                              <t t-esc="country.name" />
                            </option>
                          </t>
                        </select>
                      </div>
                    </div>
                    <div class="row">
                      <div class="col-md-12 form-group">
                        <label for="company">Company:</label>
                        <input type="text" name="company" class="form-control" t-att-value="company or contact.company" />
                      </div>
                    </div>
                    <div class="row">
                      <div class="col-md-12 form-group">
                        <label class="control-label" for="sector">Sector:</label>
                        <select name="sector" class="form-control">
                          <option value=""> -- Select sector -- </option>
                          <option value="1" t-att-selected="1 == sector">Public</option>
                          <option value="2" t-att-selected="2 == sector">Private</option>
                          <option value="3" t-att-selected="3 == sector">ONG</option>
                          <option value="4" t-att-selected="4 == sector">International Organization</option>
                          <option value="5" t-att-selected="5 == sector">Financial</option>
                          <option value="6" t-att-selected="6 == sector">Other</option>
                        </select>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
            <div class="row">
              <div class="col-md-12">
                <ul class="nav nav-tabs">
                  <li class="active"><a href="#products-interest" data-toggle="tab">Products of interest</a></li>
                  <li><a href="#areas-interest" data-toggle="tab">Areas of interest</a></li>
                  <li><a href="#topics-interest" data-toggle="tab">Topics of interest</a></li>
                </ul>
                <div class="tab-content">
                  <div id="products-interest" class="tab-pane fade in active">
                    <h3>Products of interest</h3>
                    <select name="products_interest" multiple="multiple" class="form-control elegant-multi-select">
                      <t t-foreach="products_interest" t-as="product">
                        <option t-att-value="product.id">
                          <t t-esc="product.name" />
                        </option>
                      </t>
                    </select>
                  </div>
                  <div id="areas-interest" class="tab-pane fade">
                    <h3>Areas of interest</h3>
                    <select name="areas_interest" multiple="multiple" class="form-control elegant-multi-select">
                      <t t-foreach="areas_interest" t-as="area">
                        <option t-att-value="area.id">
                          <t t-esc="area.name" />
                        </option>
                      </t>
                    </select>
                  </div>
                  <div id="topics-interest" class="tab-pane fade">
                    <h3>Topics of interest</h3>
                    <select name="topics_interest" multiple="multiple" class="form-control elegant-multi-select">
                      <t t-foreach="topics_interest" t-as="topic">
                        <option t-att-value="topic.id">
                          <t t-esc="topic.name" />
                        </option>
                      </t>
                    </select>
                  </div>
                </div>
              </div>
            </div>
            <div class="row">
              <div class="col-md-12">
                <button type="submit" class="btn btn-default azuliica hover-azuliica2 lt-blanco margin-top-10">
                  Register <span class="fa fa-long-arrow-right" />
                </button>
              </div>
            </div>
        </div>
      </form>
      <script src="/iica_contacts/static/libraries/js/node_modules/jquery/dist/jquery.min.js"></script>
      <script src="/iica_contacts/static/libraries/js/node_modules/jquery-form-validator/form-validator/jquery.form-validator.min.js"></script>
      <script src="/iica_contacts/static/libraries/js/multi_select/js/jquery.multi-select.js"></script>
      <script src="/iica_contacts/static/src/js/registration.js"></script>
      <script>
        $.validate();
        loadMultiSelect('.elegant-multi-select');
      </script>
    </t>
    

    控制器的代码:

    class IICAContactsController(http.Controller):
    @http.route('/contact/register', type='http', auth='public', website='true')
    def register(self, redirect=None, **post):
        countries = request.env['res.country'].sudo().search([])
        values = {
            'countries' : countries,
        }
    
        if post:
            error_message, valid = self._validate_form(post)
            if valid == 1:
                self._process_registration(post)
                return request.redirect('/contact/register/success')
            else:
                return request.redirect('/contact/register/error')
        else:
            contact = request.env['iica_contacts.contact']
            values.update({
                'contact' : contact,
            })
    
        return request.render("iica_contacts.register", values)