使项目任务标签的范围限于项目的标签

时间:2018-09-05 10:18:38

标签: python tags many-to-many odoo-10

有一个模型

class project_tag(models.Model):

    _name = 'project_tags.project_tag'
    _description = 'project_tag'

    name = fields.Char(string='Name', required=True, size=64)

然后有项目模型

class project(models.Model):
    _inherit = 'project.project'

    project_tag_ids = fields.Many2many(
        'project_tags.project_tag',
        'project_project_tag_ids_rel',
        'project_id',
        'project_tag_id',
        string='Tags')

最后是模型

class ProjectTask(models.Model):
    """docstring"""
    _inherit = 'project.task'

    tag_ids = fields.Many2many(
        'project_tags.project_tag',
        'project_project_tag_ids_rel',
        'project_id',
        'project_tag_id',
        string='Tags',
        domain="[('project_id', 'in', project_id)]") .

项目任务的视图(模型ProjectTask)包含字段

<field name="tag_ids" widget="many2many_tags" options="{'no_create_edit': True}"/>

用户只想在tag_ids中看到为该任务所属项目配置的那些标签。对于给定任务的项目,没有配置标签,因此tag_ids应该为空,但不是:(。

项目标签(在此示例中为空)。 enter image description here

我希望该域名对您有所帮助。不幸的是,当tag_ids字段定义与域

在一起时
tag_ids = fields.Many2many(
        'project_tags.project_tag',
        'project_project_tag_ids_rel',
        'project_id',
        'project_tag_id',
        string='Tags',
        domain="[('project_id', 'in', project_id)]") .

用户看到错误

ValueError: Invalid field u'project_id' in leaf "<osv.ExtendedLeaf: (u'project_id', u'=', 10) on project_tags_project_tag (ctx: )>"

没有域时,它会显示所有标签

tag_ids = fields.Many2many(
    'project_tags.project_tag',
    'project_project_tag_ids_rel',
    'project_id',
    'project_tag_id',
    string='Tags') 

enter image description here

用户希望仅看到为项目分配的那些标签。

项目经理可以在项目窗口中向项目添加标签。编辑或创建任务的用户应只允许选择为项目添加的那些标签。

如何修改代码,以便tag_ids仅显示任务所属的project_id的那些标签?

2 个答案:

答案 0 :(得分:1)

项目标签是由任务而不是项目分配的。因此,您的逻辑将必须类似于tag_id.task_id.project_id = project_id。

我希望这对您有帮助

答案 1 :(得分:1)

您不能在Python字段定义中使用此域

domain="[('project_id', 'in', project_id)]")

由于错误指出,没有上下文能够获取字段project_id的值作为域'in', project_id)]")部分的变量。您可以在xml视图中定义它(该视图也包含project_id字段),而不是在字段定义中使用它。

<field name="project_id"/>    
<field name="tag_ids" widget="many2many_tags" domain="[('project_id', 'in', project_id)]" options="{'no_create_edit': True}"/>

我看到的另一个错误是您的模型project_tags.project_tag在您的域中没有要过滤的project_id字段,因此至少我看不到包含该字段的整个模型定义或者您不将其添加到模型中,将无法使用域中的该字段。