Как добавить и показать некоторые атрибуты для большого числа отношений (OpenERP7)?

Это сложный вопрос.

Я пытаюсь добавить некоторые поля в таблицу many2many. Я был googling, и я обнаружил, что мне нужно создать промежуточную таблицу для хранения этих полей. Но он работает не очень хорошо.

Мой пример: я создал таблицу (training_course). Партнер может присоединиться ко многим тренировочным занятиям, а тренинг-курс состоит из многих партнеров (так что это много-много отношений). Я должен сохранить дату, когда партнер присоединился к курсу.

Итак, в форме партнера я должен увидеть список курсов, к которым он присоединился, всех с их датами.

Мой код:

res_partner_course_rel (Это промежуточный класс, созданный мной -with name = 'res.partner.course.rel' -)

_columns = {
 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade'),
 'course_id': fields.many2one('training.course', 'Course', ondelete='cascade'),
 'date': fields.date('Joining date'),
 }

res_partner

_columns = {
 'courses': fields.many2many('res.partner.course.rel', id1='partner_id', id2='partner_course_rel_id', string='Courses'),
 }

У меня проблемы:

  • В форме партнеров, когда я нажимаю на добавление новой записи в результирующий список, мне пришлось выбрать партнера (который является носенсом, потому что он должен быть текущим).
  • В результирующем списке отображается только столбец (партнер), когда я хотел бы показать два (курс и дату).

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

2 ответа

Если в одном курсе может быть несколько дат (и не только один), тогда вы определяете 3 таблицы (забудьте о многих отношениях):

partner_course_rel (.py) (у вас это было нормально)

_columns = {
 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade'),
 'course_id': fields.many2one('training.course', 'Course', ondelete='cascade'),
 'date': fields.date('Joining date'),
}

_sql_constraints = [
 ('rel_unique', 'unique(partner_id, course_id, date)', 'This course already give to this company!!'),
]

training_course (.py)

_columns = {
 'name': fields.char('Name'),
 'partner_rel_ids': fields.one2many('partner_course_rel', 'course_id'),
}

res_partner (.py)

_columns = {
 'course_rel_ids': fields.one2many('partner_course_rel', 'partner_id'),
}

И во взглядах:

training_course (.xml)

<field name="partner_rel_ids" nolabel="1">
 <tree string="Partners" editable="bottom">
 <field name="date">
 <field name="partner_id">
 </field></field></tree>
</field>

res_partner (.xml)

<field name="course_rel_ids" nolabel="1">
 <tree string="Courses" editable="bottom">
 <field name="date">
 <field name="course_id">
 </field></field></tree>
</field>

Я думаю, что это решит вашу проблему (ЕСЛИ ОДИН КУРС МОЖЕТ ИМЕТЬ МНОЖЕСТВЕННЫЕ ДАТЫ).


Удалите модель res.partner.course.rel и создайте модель res.partner.course. В этой модели будет представлена вся информация о курсе.

res_partner_course (.py)

_columns = {
 'name': fields.char('Name', size=128, required=True),
 'date': fields.date('Joining date'),
 etc...
}

Таблица res.partner.course.rel будет создана автоматически, когда вы это сделаете (всегда только с двумя полями id):

res_partner (.py)

_columns = {
 'courses_ids': fields.many2many('res.partner.course', 'res.partner.course.rel', 'partner_id', 'course_id', 'Courses', ondelete="cascade", help="Courses associated with the partner'),
}

Чтобы показать это отношение в форме партнера, вы можете сделать это:

res_partner (.xml)

<field name="courses_ids" nolabel="1">
 <tree string="Courses" editable="bottom">
 <field name="name">
 <field name="date">
 </field></field></tree>
</field>

или более простой:

licensed under cc by-sa 3.0 with attribution.