类图:
,-------------------.
| question_request |
|-------------------|
| +Char Name |
| +Char LastName |
| +Integer Age |
| +Text Description |
|-------------------|
`-------------------'
代码
from odoo import models, fields, api
class Request(models.Model):
_name = 'test.request'
_description = "Request"
name = fields.Char(string="Name", required=True)
last_name = fields.Char(string="Last Name", required=True)
age = fields.Integer(string="Age", required=True)
description = fields.Text()
目标:
用户手动验证字段值的功能。
例如:客户发送的请求的字段值如下:
Name: "Peterrrrrrrrrr"
LastName: "Smith"
Age: 150
员工用户可以按照以下方式通知客户错误的值:
Name: State=Invalid, Comment="Probably Typo error"
LastName: State=Valid
Age: State=Invalid, Comment="Confirm real age"
这不是有关值验证(odoo.api.constrains(* args))的功能,而是有关用户手动进行值验证的功能(abcde是 name <的 valid 值< / em>字段,但用户需要确认或验证)。
第一个想法是使用一个额外的字段进行验证,并使用另一个额外的字段进行评论
from odoo import models, fields, api
class Request(models.Model):
_name = 'test.request'
_description = "Request"
name = fields.Char(string="Name", required=True)
last_name = fields.Char(string="Last Name", required=True)
age = fields.Integer(string="Age", required=True)
description = fields.Text()
# fields for verification
name_verification = fields.Selection([
('valid', 'Valid'),
('invalid', 'Invalid'),
('notverified', 'Not verified')
], default="notverified")
name_verification_comment = fields.Text()
但这不是一个好方法,因为需要为每个字段和每个模型实现'field_value_verification'的需求,需要验证功能 所以我想将“ field_value_verification”存储在“ FieldsVerification”相关模型中,如下所示:
from odoo import models, fields, api
class Request(models.Model):
_name = 'test.request'
_description = "Request"
name = fields.Char(string="Name", required=True)
last_name = fields.Char(string="Last Name", required=True)
age = fields.Integer(string="Age", required=True)
description = fields.Text()
fueld_verification_ids = ???
class FieldsVerification(models.Model):
_name = 'test.fields_verification'
_description = "Verification"
class_name = fields.Char(strng="Class")
record_id = ???
field_name = fields.Char(string="Field")
status = fields .Selection([
('valid', 'Valid'),
('invalid', 'Invalid'),
('notverified', 'Not verified')
], default="notverified")
就在这里,我被卡住了,所以我想向社区询问。 预先感谢
答案 0 :(得分:0)
尝试此代码,可能会对您有所帮助。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<script>
Sys.Application.add_load(onUpdatePanelPostback);
</script>
<select class="ItemFilter" name="filters[]" multiple="multiple">
...
</select>
</ContentTemplate>
</asp:UpdatePanel>
例如,对于字段from odoo.exceptions import UserError
from odoo import api, _
@api.constrains('field_name')
def field_name_constratints(self):
if your condition:
raise UserError(_('Your Message!'))
age
也不要忘记导入@api.constrains('age')
def age_constratints(self):
if self.age > 80 or self.age < 10:
raise UserError(_('Confirm your real age !'))
和UserError
答案 1 :(得分:0)
要做你想做的事,我建议两种可能性。
假设您有一个表单视图,其中显示供用户输入的字段。
创建按钮会触发向导窗口。
另一种方法是重写模型的create()和write()方法以嵌入向导或任何验证/条件格式。
建议1的示例代码
下面是模型
class Request(models.Model):
_name = 'test.request'
_description = "Request"
name = fields.Char(string="Name", required=True)
last_name = fields.Char(string="Last Name", required=True)
age = fields.Integer(string="Age", required=True)
description = fields.Text()
def call_wizard(self):
view = self.env.ref('my_module.wizard_xml_id')
wiz = self.env['verify.input'].create({})
return {'name': _('Confirm Input?'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'verify.input',
'views': [(view.id, 'form')],
'view_id': view.id,
'target': 'new',
'res_id': wiz.id,
'context': {'default_name': self.name,
'default_last_name': self.last_name,
'default_age': self.age,
'default_description': self.description}
}
下面是向导
class Verify(models.TransientModel):
_name = 'verify.input'
name = fields.Char(string="Name", required=True)
last_name = fields.Char(string="Last Name", required=True)
age = fields.Integer(string="Age", required=True)
description = fields.Text()
为向导创建xml视图,以显示所需的视图。