Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
5 Trả lời
2635 Lượt xem

i add a custom filed (selection field "sex") to res.partner and i want to add it to sign up page , how to do that?

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi

Inherit the auth.signup.fields and add the following template into it,it shows gender in the signup form

<template id="signup_customisation_gender" inherit_id="auth_signup.fields">
   <xpath expr="//div[hasclass('field-confirm_password')]" position="after">
        <label for="gender">gender</label>
           <input type="text" class="form-control form-control-sm"
                  name="gender" id="gender"/>
   </xpath>
</template>

Add the gender from partner in the controller

class WebAuthSignup(AuthSignupHome):

@http.route('/web/signup', type='http', auth='public', website=True,
sitemap=False, csrf=False)
def web_auth_signup(self, *args, **kw):
"""function used to add extra information at the time of signup"""
res = super().web_auth_signup(*args, **kw)
qcontext = self.get_auth_signup_qcontext()
user = request.env['res.users']
user_sudo = user.sudo().search(
user._get_login_domain(qcontext.get('login')),
order=user._get_login_order(), limit=1
)
if 'gender' in kw:
user_sudo.partner_id.gender = kw['gender']
return res


Regards

Ảnh đại diện
Huỷ bỏ
Tác giả

i want gender as selection field not text

This is the BEST ANSWER after I've spending millenials on this issue. And it will also work for any fields. Thanks a lot.

Câu trả lời hay nhất

Hi, this is exactly what you need: https://youtu.be/An6YTH3kJD8

Thanks

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Answer of Mily Shajan works ! saved my day, thanks

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi

In xml, you can have this code. Here we are inheriting the signup page template and add the field




<?xml version="1.0" encoding="utf-8"?>
<!--Add an input field in sign up page, to have the gender-->
<odoo>
<template id="signup_add_gender" inherit_id="auth_signup.signup">
        <xpath expr="//input[@name='token']" position="before">
            <div class="mb-3">
                <label for="sex">Sex</label>
                <select name="gender" class="form-control link-style">
                    <option value="">--select--</option>
                    <option value="male">Male</option>
                    <option value="female">Female</option>
<option value="transgender">Transgender</option>
                </select>
            </div>
        </xpath>
    </template>
</odoo>




In controllers, by overwriting the function 'web_auth_signup' like this, and we can update the qcontext with gender,  later we can have the value

import werkzeug
from werkzeug.urls import url_encode
from odoo import _
from odoo.addons.auth_signup.controllers.main import AuthSignupHome
from odoo.addons.auth_signup.models.res_users import SignupError
from odoo.exceptions import UserError
from odoo.http import _logger, request


class WebsiteLogin(AuthSignupHome):
def web_auth_signup(self, *args, **kw):
    """Overwrite the function web_auth_signup, to add the value of gender
    to qcontext"""
    qcontext = self.get_auth_signup_qcontext()
    qcontext.update({
        'gender': kw.get('gender')
    })
      if not qcontext.get('token') and not qcontext.get('signup_enabled'):
        raise werkzeug.exceptions.NotFound()
    if 'error' not in qcontext and request.httprequest.method == 'POST':
        try:
            self.do_signup(qcontext)
            User = request.env['res.users']
            user_sudo = User.sudo().search(
                User._get_login_domain(qcontext.get('login')),
                order=User._get_login_order(), limit=1
            )
            template = request.env.ref(
                'auth_signup.mail_template_user_signup_account_created',
                raise_if_not_found=False)
            if user_sudo and template:
                template.sudo().send_mail(user_sudo.id, force_send=True)
            return self.web_login(*args, **kw)
        except UserError as e:
            qcontext['error'] = e.args[0]
        except (SignupError, AssertionError) as e:
            if request.env["res.users"].sudo().search(
                    [("login", "=", qcontext.get("login"))]):
                qcontext["error"] = _("Another user is already registered"
                                      " using this email address.")
            else:
                _logger.error("%s", e)
                qcontext['error'] = _("Could not create a new account.")
    elif 'signup_email' in qcontext:
        user = request.env['res.users'].sudo().search(
            [('email', '=', qcontext.get('signup_email')),
             ('state', '!=', 'new')], limit=1)
        if user:
            return request.redirect('/web/login?%s' % url_encode(
                {'login': user.login, 'redirect': '/web'}))
    response = request.render('auth_signup.signup', qcontext)
    response.headers['X-Frame-Options'] = 'SAMEORIGIN'
    response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
    return response

Hope it helps

Ảnh đại diện
Huỷ bỏ
Tác giả Câu trả lời hay nhất

for python

class AuthSignupHomePage(AuthSignupHome):
@http.route('/web/signup', type='http', auth='public', website=True, sitemap=False)
def web_auth_signup(self, *args, **kw):
qcontext = self.get_auth_signup_qcontext()
web_company = request.env.company

res = super(AuthSignupHomePage, self).web_auth_signup()
user = request.env['res.users'].sudo().search([("login", "=", qcontext.get("login"))])
user.sudo().write({
'sex': kw.get('sex'),
})
return res

def get_auth_signup_qcontext(self):
qcontext = super(AuthSignupHomePage, self).get_auth_signup_qcontext()
sex = request.env['res.partner']._fields['sex'].selection
# print("dddddddddddddddddddddddddddddddddd", sex)
qcontext['sex'] = sex
return qcontext

for xml 

id="signup_edit" name="edit signup" inherit_id="auth_signup.fields" >

expr="//div[hasclass('field-confirm_password')]" position="after">
t-attf-class="form-group ">












Ảnh đại diện
Huỷ bỏ
Bài viết liên quan Trả lời Lượt xem Hoạt động
4
thg 12 23
22403
5
thg 7 24
15745
1
thg 6 22
27267
9
thg 5 22
53537
0
thg 7 20
3043