簡體   English   中英

通過Odoo中的代碼發送電子郵件時出錯

[英]Error when sending email through code in Odoo

我通過單擊模塊“ linh_warehoues”中的“發送電子郵件”按鈕創建了一個發送電子郵件的功能,但出現此錯誤:

關系“ mail_thread”不存在

我真的不明白這是什么意思。 我還檢查了“ mail_thread.py”中是否存在類“ mail_thread”。 希望大家能幫助我。 預先感謝您的幫助和建議。

這是我的代碼:

____openerp__.py

{
'name': ' New Warehouse ',
'version': '1.0',
'category': 'Tools',
'description': 'Simulation of warehouse module',
'author': 'Linh',
'depends': ['base','mail','email_template'],
'installable': True,
'auto_install': False,
'application': True,
'data': ['linh_warehouse_view.xml',       
         'linh_mail_action_data.xml',
         ],

}

linh_warehouse_model.py

class Receipt (models.Model):
    _name = 'linh.warehouse.receipt'

    name = fields.Char('Name') 
    check = fields.Boolean('Done')
    name2 = fields.Char('Name2 Product') 
    note = fields.Text("Note")
    mid_id = fields.One2many('linh.warehouse.middle','receipt_id',string ='Product' )

    @api.v7
    def action_mail_send(self, cr, uid, ids, context=None):
        '''
        This function opens a window to compose an email, with the edi sale template message loaded by default
        '''

        assert len(ids) == 1, 'This option should only be used for a single id at a time.'
        ir_model_data = self.pool.get('ir.model.data')
        try: 
            template_id = ir_model_data.get_object_reference(cr, uid, 'linh_warehouse', 'email_template_edi_linh_warehouse')[1]
        except ValueError:
            template_id = False
        try:
            compose_form_id = ir_model_data.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')[1]
        except ValueError:
            compose_form_id = False 
        ctx = dict()
        ctx.update({
            'default_model': 'linh.warehouse.receipt',
            'default_res_id': ids[0],
            'default_use_template': bool(template_id),
            'default_template_id': template_id,
            'default_composition_mode': 'comment',
            'mark_so_as_sent': True
        })
        return {
            'type': 'ir.actions.act_window',
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'mail.compose.message',
            'views': [(compose_form_id, 'form')],
            'view_id': compose_form_id,
            'target': 'new',
            'context': ctx,
        }

class mail_compose_message(models.Model):
    _inherit = ['mail.compose.message']

    def send_mail(self, cr, uid, ids, context=None):
        context = context or {}
        if context.get('default_model') == 'linh.mail' and context.get('default_res_id') and context.get('mark_so_as_sent'):
            context = dict(context, mail_post_autofollow=True)
        return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)

linh_warehouse_view.xml

    <!-- form view receipt -->
    <record id="view_form_linh_warehouse_receipt" model="ir.ui.view">
        <field name="name">view_form_linh_warehouse_receipt</field>
        <field name="model">linh.warehouse.receipt</field>
        <field name="arch" type="xml">
            <header>                
                <button name="action_mail_send" type="object" string="Send email"/>             
            </header>
             <form string=" Warehosue Receipt">
                <group name="info">
                    <field name="name"/>
                    <field name="check"/>                   
                </group>            
            </form>         
        </field>
    </record>

linh_mail_action_data.xml

  <?xml version="1.0" encoding="UTF-8"?>
<openerp>
    <data>
        <!-- EDI related Email Templates menu -->
        <record model="ir.actions.act_window" id="action_email_templates">
            <field name="name">Email Templates</field>
            <field name="res_model">email.template</field>
            <field name="view_type">form</field>
            <field name="view_mode">form,tree</field>
            <field name="view_id" ref="email_template.email_template_tree" />
            <field name="search_view_id" ref="email_template.view_email_template_search" />
            <field name="context"
                eval="{'search_default_model_id': ref('model_linh_warehouse_receipt')}" />
        </record>
    </data>

    <!-- Mail template are declared in a NOUPDATE block so users can freely 
        customize/delete them -->
    <data noupdate="1">
        <!--Email template -->
        <record id="email_template_edi_linh_warehouse" model="email.template">
            <field name="name">Receipt - Send email</field>
            <field name="email_from">bms@openerp.com</field>
            <field name="subject">Send email by Odoo</field>
            <field name="email_to">abc@gmail.com</field>
            <field name="auto_delete" eval="True" />
            <field name="model_id" ref="model_linh_warehouse_receipt" />
            <field name="body_html"><![CDATA[
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">

    <p>Hello,</p>

    <p>Sent successful</p>

</div>
            ]]></field>
        </record>
    </data>
</openerp>

追溯:

Traceback (most recent call last):
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 537, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 574, in dispatch
    result = self._call_function(**self.params)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 310, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/service/model.py", line 113, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 307, in checked_call
    return self.endpoint(*a, **kw)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 803, in __call__
    return self.method(*args, **kw)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/http.py", line 403, in response_wrap
    response = f(*args, **kw)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/web/controllers/main.py", line 948, in call_button
    action = self._call_kw(model, method, args, {})
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/web/controllers/main.py", line 936, in _call_kw
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/sale/sale.py", line 1201, in send_mail
    return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/purchase/purchase.py", line 1557, in send_mail
    return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 363, in old_api
    result = method(recs, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/account/account_invoice.py", line 1648, in send_mail
    return super(mail_compose_message, self).send_mail()
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 239, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 546, in new_api
    result = method(self._model, cr, uid, self.ids, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/linh_warehouse/linh_warehouse_model.py", line 145, in send_mail
    return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/email_template/wizard/mail_compose_message.py", line 87, in send_mail
    return super(mail_compose_message, self).send_mail(cr, uid, ids, context=wizard_context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/mail/wizard/mail_compose_message.py", line 243, in send_mail
    active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **mail_values)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/mail/mail_thread.py", line 1696, in message_post
    self.write(cr, SUPERUSER_ID, [thread_id], {'message_last_post': fields.datetime.now()}, context=context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/addons/mail/mail_thread.py", line 432, in write
    result = super(mail_thread, self).write(cr, uid, ids, values, context=context)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 241, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 363, in old_api
    result = method(recs, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/models.py", line 3774, in write
    self._write(old_vals)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 239, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/api.py", line 546, in new_api
    result = method(self._model, cr, uid, self.ids, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/models.py", line 3885, in _write
    cr.execute(query, params + (sub_ids,))
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/sql_db.py", line 158, in wrapper
    return f(self, *args, **kwargs)
  File "/home/apple/Desktop/Untitled Folder/odoo8/openerp/sql_db.py", line 234, in execute
    res = self._obj.execute(query, params)
ProgrammingError: relation "mail_thread" does not exist
LINE 1: UPDATE "mail_thread" SET "message_last_post"='2016-04-06 15:...

問題在這里:

'default_model': 'linh.warehouse.receipt',

該對象是您的,我的懷疑是,與account.invoicesale.order不同,您的對象不繼承自mail.thread並且沒有評論歷史記錄。 但是通過使用:

'default_composition_mode': 'comment',

您在告訴向導不僅要發送郵件,還要將郵件作為注釋附加到對象的歷史記錄中。

解決方案將是為您的對象啟用評論歷史記錄,或引用要發布到的另一個對象。

這是您send_mail代碼的錯誤,請嘗試以下代碼:

class MailComposeMessage(models.Model):
    _inherit = 'mail.compose.message'

    @api.multi
    def send_mail(self, auto_commit=False):
        if self._context.get('default_model') == ''linh.mail' and self._context.get('default_res_id'):
        return super(MailComposeMessage, self.with_context(mail_post_autofollow=True)).send_mail(auto_commit=auto_commit)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM