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?
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Boekhouding
- Voorraad
- PoS
- Project
- MRP
Deze vraag is gerapporteerd
Hi
Inherit the auth.signup.fields and add the following template into it,it shows gender in the signup form
<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
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.
Answer of Mily Shajan works ! saved my day, thanks
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.
<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">
</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
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 ">
Geniet je van het gesprek? Blijf niet alleen lezen, doe ook mee!
Maak vandaag nog een account aan om te profiteren van exclusieve functies en deel uit te maken van onze geweldige community!
AanmeldenGerelateerde posts | Antwoorden | Weergaven | Activiteit | |
---|---|---|---|---|
|
4
dec. 23
|
22272 | ||
|
5
jul. 24
|
15631 | ||
Working with fields.selection values
Opgelost
|
|
1
jun. 22
|
27150 | |
|
9
mei 22
|
53396 | ||
|
0
jul. 20
|
2954 |