Odoo 8 - массовое редактирование и полевые домены - PullRequest
0 голосов
/ 12 октября 2018

У меня есть модель в пользовательском плагине, который я разрабатываю с полем, которое я хочу ограничить конкретным доменом.Моя модель выглядит примерно так:

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 , чтобы я мог редактировать ui версий нескольких экземпляров mymodel, фильтр домена будет не применено, и я могу ошибочно выбирать версии программного обеспечения из других проектов.

Выискивая в базе данных, похоже, что домен там даже не сохраняется.

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

Аналогично, домен не находится в поле «Настройки» - «Технические параметры» - «Структура базы данных» -> «Поля» для этого поля:

Screenshot of Field Settings

Q : Как я могу заставить модуль массового редактирования подчиняться домену моих полей, чтобы я мог выбирать только версии проектов пользовательского интерфейса?Нужно ли хранить этот домен в базе данных?Если да, то как?


Редактировать: В соответствии с просьбой Бхавеш Одедра , ниже приведены определения для robots.software.versions и 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'),
    }

1 Ответ

0 голосов
/ 12 октября 2018

Домен должен быть

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

Вы можете сослаться на https://odedrabhavesh.blogspot.com/2015/09/domain-in-odoo.html для будущего развития.

Обновлено

  • Добавить project_name поле в robots.software.versions объект и связать его с project как

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

  • Теперь обновите свой домен как

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

...