Сделайте теги задач проекта привязанными к тегам проекта - PullRequest
0 голосов
/ 05 сентября 2018

есть модель

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, к которому относится задача?

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

Вы не можете использовать этот домен в определении поля 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 голосов
/ 14 сентября 2018

Я закончил установку модуля Теги проекта . Затем я настроил задачу проекта, чтобы показывать только те теги на выбор, чье имя есть в списке тегов проекта.

:)

0 голосов
/ 07 сентября 2018

Теги проекта назначаются задачей, а не проектом. Таким образом, ваша логика должна быть похожа на tag_id.task_id.project_id = project_id.

Надеюсь, это поможет

...