首页 > 解决方案 > Odoo 8 - 批量编辑和字段域

问题描述

我在一个自定义插件中有一个模型,我正在开发一个我想限制到特定域的字段。我的模型看起来像:

from openerp.osv import fields, osv

class MyModel(osv.Model):
    _name = 'mymodel'
    _columns = {
        'ui_code_version': fields.many2one(
            comodel_name='robots.software.versions', 
            string='UI Code Version', 
            domain="[('project', '=', 'ui')]"
        )
    }

当直接编辑我的模型实例时,似乎domain 正确地将我的选择限制为ui项目版本,这很棒。

但是,如果我设置Mass Editing模块以便我可以编辑 的多个实例的uimymodel版本,则不会应用域过滤器,并且我可能会错误地从其他项目中选择软件版本。

在数据库中四处寻找,看起来域甚至没有存储在那里。

MyOdooDatabase> SELECT name, domain FROM ir_model_fields \
                WHERE model = 'mymodel' AND name = 'ui_code_version'
+-----------------------+----------+
| name                  |   domain |
|-----------------------+----------|
| ui_code_version       |   <null> |
+-----------------------+----------+

同样,域不在此字段的 Settings->Technical->Database Structure->Fields 条目中:

字段设置截图

:如何让批量编辑模块服从我的字段域,以便我只能选择 ui 项目版本?该域是否需要存储在数据库中?如果是这样,怎么做?


编辑:根据Bhavesh Odedra的要求,以下是robots.software.versionsand的定义robots.software.projects

class RobotsSoftwareVersions(osv.Model):
    _name = 'robots.software.versions'
    _description = 'Software Version'
    _columns = {
        'name': fields.char('Name'),
        'project': fields.many2one('robots.software.projects', 'Project'),
        'version': fields.char('Version', help='The git tag or hash (e.g. 3.2.1)')
    }

class RobotsSoftwareProjects(osv.Model):
    _name = 'robots.software.projects'
    _columns = {
        'name': fields.char('Name'),
        'upstream': fields.char('Upstream'),
    }

标签: odooodoo-8

解决方案


域应该是

domain="[('project', '=', 'ui')]"

您可以参考https://odedrabhavesh.blogspot.com/2015/09/domain-in-odoo.html进行未来的开发。

更新

  • 在对象中添加project_name字段robots.software.versions并使其与projectlike相关

    'project_name': fields.related('project', 'name', type='char', store=True)

  • 现在更新您的域,例如

    domain=[('project_name', '=', 'ui')]


推荐阅读