将项目任务标签的范围限定为项目的标签
Make project task tags scoped to the project's tags
有模型
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 应该是空的,但它不是 :(.
项目标签(在本例中为空)。
我希望该域名能有所帮助。不幸的是,当 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')
用户希望只看到为项目分配的标签。
项目经理可以在项目上window为项目添加标签。应允许编辑或创建任务的用户仅选择为项目添加的标签。
如何修改代码,以便 tag_ids 仅显示任务所属 project_id 的那些标签?
项目标签是由任务而不是项目分配的。所以你的逻辑必须像 tag_id.task_id.project_id = project_id.
希望对您有所帮助
您不能在 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 字段,所以至少我没有看到整个包含该字段的模型定义或者您不将其添加到模型中,您将无法在域中使用该字段。
我最终安装了模块 Project tags。然后我将项目任务配置为仅显示那些名称在项目标签列表中的标签以供选择。
:)
有模型
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 应该是空的,但它不是 :(.
项目标签(在本例中为空)。
我希望该域名能有所帮助。不幸的是,当 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')
用户希望只看到为项目分配的标签。
项目经理可以在项目上window为项目添加标签。应允许编辑或创建任务的用户仅选择为项目添加的标签。
如何修改代码,以便 tag_ids 仅显示任务所属 project_id 的那些标签?
项目标签是由任务而不是项目分配的。所以你的逻辑必须像 tag_id.task_id.project_id = project_id.
希望对您有所帮助
您不能在 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 字段,所以至少我没有看到整个包含该字段的模型定义或者您不将其添加到模型中,您将无法在域中使用该字段。
我最终安装了模块 Project tags。然后我将项目任务配置为仅显示那些名称在项目标签列表中的标签以供选择。
:)