我正在尝试在 odoo 代码中添加一个控制器,该控制器接受很少的值来创建线索。
我的控制器代码是:
@http.route('/v1/sg/book_a_demo', type='json', auth='none', methods=['POST', 'OPTIONS'],
cors='*', csrf=False)
def handle_book_a_demo_request(self):
lead = request.env["crm.lead"]
partner = request.env["res.partner"]
data = json.loads(request.httprequest.data)
if data:
name = data.get('name')
address = data.get('address')
phone = data.get('phone')
email = data.get('email')
business_name = data.get('business_name')
business_abn = data.get('business_abn')
captcha_token = data.get('captcha_token')
individual_vals = {
'name': name,
'email': email,
'phone': phone,
'address': address,
'company_type': 'person',
'total_properties': data.get('total_properties'),
'comment': data.get('message'),
'parent_id': company_partner.id,
}
individual_id = partner.sudo().create(individual_vals)
lead_vals = {
'name': individual_id.name,
'partner_id': individual_id.id,
'source_id': request.env.ref('sg_crm.demo_request_source').id,
'type': 'lead',
'stage_id': crm_new_stage,
'total_properties': data.get('total_properties'),
'description': data.get('message')
}
lead_id = lead.sudo().create(lead_vals)
response = {
'status': 200,
'id': lead_id.id,
}
result_response = {
'result': [response]
}
return result_response
但是当我通过邮递员点击这个控制器时:
{
"name": "John Doe",
"address": "123 Main Street",
"phone": "1234567890",
"email": "[email protected]",
"business_name": "ABC Company",
"business_abn": "123456789",
"captcha_token": "your_captcha_token_here",
"total_properties": "5",
"message": "This is a demo request message"
}
它确实将以下回溯抛出到我的控制台: 回溯(最近一次调用最后一次): 文件“/opt/odoo/server/odoo/models.py”,第 5158 行,ensure_one _id, = self._ids ^^^^ ValueError:没有足够的值来解压(预期为 1,得到 0)
在处理上述异常的过程中,又发生了一个异常:
Traceback (most recent call last):
File "/opt/odoo/server/odoo/api.py", line 414, in _model_create_multi
return create(self, [arg])
^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/server/addons/crm_iap_enrich/models/crm_lead.py", line 43, in create
leads = super(Lead, self).create(vals_list)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<decorator-gen-237>", line 2, in create
File "/opt/odoo/server/odoo/api.py", line 415, in _model_create_multi
return create(self, arg)
^^^^^^^^^^^^^^^^^
File "/opt/odoo/server/addons/crm/models/crm_lead.py", line 713, in create
leads = super(Lead, self).create(vals_list)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<decorator-gen-139>", line 2, in create
File "/opt/odoo/server/odoo/api.py", line 415, in _model_create_multi
return create(self, arg)
^^^^^^^^^^^^^^^^^
File "/opt/odoo/server/addons/mail/models/mail_thread.py", line 284, in create
thread.sudo().message_post(subtype_id=subtype.id, author_id=self.env.user.partner_id.id)
File "/opt/odoo/server/addons/rating/models/mail_thread.py", line 15, in message_post
message = super(MailThread, self).message_post(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/server/addons/mail/models/mail_thread.py", line 2000, in message_post
if self.env.user._is_public() and guest:
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/odoo/server/odoo/addons/base/models/res_users.py", line 1053, in _is_public
self.ensure_one()
File "/opt/odoo/server/odoo/models.py", line 5161, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: res.users()
这很尴尬。我可以确认 individual_id 合作伙伴已成功创建,但在 odoo 中创建主要对象时遇到困难。有人可以帮我吗?预先感谢
将
auth
设置为 none
时,请求代码将无法访问当前用户。
来自路由文档部分:
auth (str) –
身份验证方法,以下之一:
:用户必须经过身份验证,当前请求将使用用户的权限执行。user
:用户可能已通过身份验证,也可能未经过身份验证。如果不是,则当前请求将使用共享的公共用户执行。public
:该方法始终处于活动状态,即使没有数据库也是如此。主要由框架和身份验证模块使用。请求代码不会有任何设施来访问当前的用户。none