将项目任务标记限定为项目标记的范围

问题描述 投票:0回答:3

有一个模型

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标签?

python tags many-to-many odoo-10
3个回答
1
投票

项目标签由任务分配,而不是项目。所以你的逻辑必须像tag_id.task_id.project_id = project_id。

我希望这有帮助


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字段,所以至少我没有看到包含该字段的整个模型定义或者你没有添加它对于模型,您将无法在域中使用该字段。


0
投票

我最终安装了模块Project tags。然后我将项目任务配置为仅显示可供选择的标记,其名称位于项目标记列表中。

:)

© www.soinside.com 2019 - 2024. All rights reserved.