Вы знаете о параметре inverse_name
, доступном для полей One2many.Он просто сообщает Odoo, которое является обязательным полем Many2one в соответствующем комоделе, чтобы знать записи для показа.
В стандартном модуле account , в модели account.invoice
есть поле Many2one с именемmove_id
.Она относится к модели account.move
и ее целью является отображение записи журнала, созданной для счета-фактуры, когда проверяется этот счет.
Единственное, что я хочу сделать, это показать в форме записей журнала (account.move
) счет (account.invoice
), проверка которого сгенерировала эту запись журнала.Для меня это выглядело легко, я только что создал другую часть отношений в account.move
модели:
invoice_ids = fields.One2many(
comodel_name='account.invoice',
inverse_name='move_id',
string='Invoices whose validation generated this journal entry',
)
Логический между account.invoice
и account.move
должен быть1: 1, но для этого случая я могу использовать 1: N, поскольку One2many просто информативен и доступен только для пользователей.Так что этот, похоже, работал хорошо, я смог увидеть счет в записи журнала, но через некоторое время я понял, что уничтожил рабочий процесс с этим кодом.
Это то, что происходит сейчас, я опишуэто с примерами:
Я создаю и проверяю счет SALE / INV / 00001 .
В результате проверки создаетсязапись в журнале 2019/00001 .Я вижу эту запись журнала в форме счета-фактуры, и я могу видеть счет-фактуру в форме записи журнала (в One2many, который я создал).Верно.
Я оплачиваю счет, и вот тут все ломается.В результате платежа создается запись журнала 2019/00002 , которая в порядке, но теперь в счете-фактуре SALE / INV / 00001 вместо этой записи отображается 2019 /00001 , что неверно, и если я перейду к форме записи журнала 2019/00001 , то поле One2many, которое я создал, чтобы показать связанный счет, будет пустым, тогда как поле в журналезапись, сгенерированная платежом, показывает SALE / INV / 00001 , когда она должна быть пустой.
Я ожидал, что в поле записи журнала invoice_ids
отобразятся только счета, чьипроверка сгенерировала эту запись журнала, поскольку move_id
в счетах-фактурах показывает только записи журнала, созданные с помощью проверок.
Чтобы исправить это, я заменил One2many invoice_ids
на Many2one invoice_id
в записи журнала, изаполните это автоматически в account.move
ORM метод создания.Но это решение не связывает старые записи в базе данных, и я до сих пор не понимаю поведение кода, описанного выше.
Итак, у кого-нибудь есть объяснение этому?Я хотел бы знать, почему inverse_name
ведет себя так.