У задачи проекта может быть много тегов. Теперь, когда пользователь создает задачу, он может выбирать из всех тегов. Но он хочет иметь возможность выбирать теги только из тех тегов, которые используются для этого проекта.
Какое правило домена я должен иметь в поле «тег» (в форме), чтобы пользователь при создании новой задачи проекта мог видеть (и, в конечном итоге, выбирать) только те теги, которые используются в проекте, для которого пользователь создает задачу?
То, что я пробовал, не сработало.
У меня есть следующий код
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. И в этом проблема: он не берет теги только из задач этого проекта. Также появляются теги из задач других проектов, что нежелательно.
Как такое может быть, что включены все теги, а не только теги из задач текущего проекта?
[task.tag_ids for task in self.task_ids]
(но вам нужна правильная функция, возвращающая плоский список). Тогда домен будет[('id', 'in', project_id.tag_ids)}
. Скажите, если я недостаточно ясен. - person Harlan   schedule 02.08.2018