Odoo - вычислительное поле работает на локальном, но не онлайн - PullRequest
0 голосов
/ 25 января 2019

У меня есть настраиваемое поле в модели партнера, которое будет получать все записи подписей (из приложения Sign), касающиеся текущего партнера, вот мой код:

# Signatures
x_signatures_relation = fields.One2many("signature.request.item", "partner_id")
x_signatures = fields.One2many("signature.request", compute="_get_signed_documents")

@api.multi
def _get_signed_documents(self):
    for record in self:
        record.x_signatures = [(6, 0, record.x_signatures_relation.ids)]

И это в части XML:

<page string="Signatures" name="signatures">
                    <tree>
                        <field name="x_signatures" />
                    </tree>
                </page>

Код отлично работает, как и ожидалось, на моей локальной машине, но как только я проталкиваю его через Github в odoo.sh, я получаю эту ошибку, когда посещаю партнера с хотя бы одной подписью (не происходит с партнерами без подписей) ):

Error:
TypeError: val is undefined

https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/3826-7bbc86b/web.assets_backend.js:1264
Traceback:
_parseServerData/<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/3826-7bbc86b/web.assets_backend.js:1264:545
_.forEach@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:12:558
_parseServerData@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/3826-7bbc86b/web.assets_backend.js:1264:288
_readMissingFields/</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/3826-7bbc86b/web.assets_backend.js:1275:445
_.forEach@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:12:558
_readMissingFields/<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/3826-7bbc86b/web.assets_backend.js:1275:35
then/</</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:802:678
fire@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:796:281
fireWith@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:801:198
Deferred/</deferred[tuple[0]]@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:803:56
rpc/</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:3869:346
then/</</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:802:678
fire@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:796:281
fireWith@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:801:198
Deferred/</deferred[tuple[0]]@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:803:56
fire@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:796:281
fireWith@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:801:198
then/</</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:802:874
fire@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:796:281
fireWith@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:801:198
then/</</<@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:802:874
fire@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:796:281
fireWith@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:801:198
done@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:1192:86
callback@https://keydigital-tb-import-test-258937.dev.odoo.com/web/content/1751-3ead7e4/web.assets_common.js:1212:15

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

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Ответа sfx должно быть достаточно, но я хочу больше рассказать о вашей ошибке.

<page string="Signatures" name="signatures">
    <tree>
        <field name="x_signatures" />
    </tree>
</page>

(Полагаю) Вы пытаетесь заставить Odoo показывать подписи в виде списка. Это не обязательно, так как другой ответ уже говорит вам. Но настоящая ошибка здесь заключается в использовании <tree> иерархического над полем, которое должно отображаться в виде подпредставления списка.

Вы должны использовать <tree> (или <kanban>) в поле, которое хотите показать как подпредставление. И тогда недостаточно просто определить пустое подпредставление, но подпредставление с полями, метками и т. Д.:

<page string="Signatures" name="signatures">
    <field name="x_signatures">
        <tree>
            <field name="field_1" />
            <field name="field_2" />
            <field name="field_n" />
        </tree>
    </field>
</page>
0 голосов
/ 25 января 2019

Я решил это, отредактировав код Python следующим образом:

@api.depends('x_signatures_relation')
@api.multi
def _get_signed_documents(self):
    for record in self:
        ids = []
        for signature in record.x_signatures_relation:
            ids.append(signature.signature_request_id.id)
        record.x_signatures = [(6, 0, ids)]

Тем не менее я понятия не имею, почему первый фрагмент кода не работал на odoo.sh и отлично работал на моей локальной машине.

0 голосов
/ 25 января 2019

Я думаю, этого достаточно

<page string="Signatures" name="signatures">
     <field name="x_signatures">
         <tree>
            <field name='your_filed_name'/>
            <field name='your_filed_name_2'/> 
         </tree>
     </field>
</page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...