设计字段值验证(不是odoo.api.constrains验证)

时间:2019-06-08 15:48:01

标签: python odoo

类图:

   ,-------------------.    
   | 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")

就在这里,我被卡住了,所以我想向社区询问。 预先感谢

2 个答案:

答案 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)

要做你想做的事,我建议两种可能性。
假设您有一个表单视图,其中显示供用户输入的字段。

  1. 创建按钮会触发向导窗口。

  2. 另一种方法是重写模型的create()和write()方法以嵌入向导或任何验证/条件格式。

ORM wizard explaination

建议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视图,以显示所需的视图。