обновлено: домен тегов задач проекта Odoo

У задачи проекта может быть много тегов. Теперь, когда пользователь создает задачу, он может выбирать из всех тегов. Но он хочет иметь возможность выбирать теги только из тех тегов, которые используются для этого проекта.

Какое правило домена я должен иметь в поле «тег» (в форме), чтобы пользователь при создании новой задачи проекта мог видеть (и, в конечном итоге, выбирать) только те теги, которые используются в проекте, для которого пользователь создает задачу?

То, что я пробовал, не сработало.

У меня есть следующий код

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

@api.onchange('project_id')
def onchange_project(self):
    """docstring"""
    tag_ids = []
    if self.project_id:
        for task in self.project_id.task_ids:
            tag_ids += task.tag_ids.ids
    return {'domain': {'tag_ids': [('id', 'in', tag_ids)]}}

С этим кодом установлен. Я открываю проект и нажимаю «Создать», чтобы открыть форму создания задачи (форма для нового объекта модели «project.task»). В этой форме я нажимаю раскрывающийся список «Теги», чтобы перечислить возможные «Теги» для проекта («возможные теги для проекта» - это все теги, которые используются в любой задаче проекта, для которого создана задача). И я вижу все теги. Это не нужно.

Обновление: в раскрывающемся списке "Теги" (в режиме отладки при наведении указателя мыши на раскрывающееся меню "Теги") эффективным доменом является id, in, 4,5,6,7, 8,9,10,11,12,13,14,18,19,20,22,23,24,25,26,27,28,5,4,5,35. И в этом проблема: он не берет теги только из задач этого проекта. Также появляются теги из задач других проектов, что нежелательно.

Как такое может быть, что включены все теги, а не только теги из задач текущего проекта?


person Developer Marius Žilėnas    schedule 02.08.2018    source источник
comment
Похоже, что у самих проектов нет атрибута tag_ids. Вы имеете в виду, что пользователи должны иметь возможность выбирать только те теги, которые используются в других задачах этого проекта? В этом случае для первой задачи проекта они не смогут ничего выбрать.   -  person Harlan    schedule 02.08.2018
comment
@Harlan: да, для первого проекта список будет пустым, поэтому ему не придется выбирать, в этом случае пользователь может создать тег для этой задачи. Да, у проекта нет тегов, поэтому все теги проекта - это теги, назначенные любой задаче этого проекта.   -  person Developer Marius Žilėnas    schedule 02.08.2018
comment
О, ладно, я не думал о возможности Create. Мне приходит в голову такой домен, как [('id', 'in', project_id.task_ids.tag_ids)], но я никогда не могу вспомнить, разрешено ли вам делать 'ids.something'. Если это не сработает, вы можете наследовать от project.project, чтобы добавить поле tag_ids Many2many, которое вычисляется до чего-то вроде [task.tag_ids for task in self.task_ids] (но вам нужна правильная функция, возвращающая плоский список). Тогда домен будет [('id', 'in', project_id.tag_ids)}. Скажите, если я недостаточно ясен.   -  person Harlan    schedule 02.08.2018
comment
@ Харлан, спасибо, я пробовал этот подход, но не смог заставить его работать. Не могли бы вы увидеть код, который я поместил в обновлении вопроса.   -  person Developer Marius Žilėnas    schedule 03.08.2018


Ответы (1)


Модель тегов имеет поле имени, поэтому вы можете добавить свое правило домена на его основе. Например, имя начинается с или заканчивается на и т. Д.

Но вы можете добавить новое поле (project_id) в project.tags, чтобы указать, к какому проекту принадлежит тег, тогда в форме задачи вы можете использовать, например, [('project_id', '=', project_id)].

person Kenly    schedule 02.08.2018
comment
Ty. Правило домена для перечисления только тех тегов, которые предназначены для текущего проекта задачи, будет выглядеть так [('name', 'ilike', project.name + '%')]? И еще вопрос: не связаны ли теги с project.tasks [tag_ids = fields.Many2many ('project.tags', string = 'Tags', oldname = 'category_ids')] [ github.com/odoo/odoo/weblob используйте что ? - person Developer Marius Žilėnas; 02.08.2018
comment
Вам нужно указать проект, в котором используется тег, и это закончится новым fied. Поле many2many сообщит вам, в какой задаче вы использовали тег, и в вашем случае вам нужна обратная связь. - person Kenly; 02.08.2018