如何在odoo中创建手动视图?

How to create a manual view in odoo?

未创建以下视图。有什么问题?

方法:

      def daily_flash_report_tree(self, cr, uid, ids, context=None):
          sql = """
            CREATE OR REPLACE VIEW report_view AS (
              SELECT 
                   id,name,job
                from   
                   sales_summary limit 10
             ) 

        """

        cr.execute(sql)

        return {
            'name': "Daily Flash Report",
            'view_type': 'form',
            'view_mode': 'tree',
            'res_model': 'daliy.flash.report',
            'type': 'ir.actions.act_window',
            'context': {"search_default_group_period": 1},
        }

对象:

class daily_flah_report_new(osv.osv):

    _name = "daliy.flash.report"
    _auto = False

    _columns = {
        'name': fields.char('Name'),
        'job': fields.char('Job'),
    }

查看:

<record id="drill_flash_report_flash" model="ir.ui.view">
    <field name="name">Report</field>
    <field name="model">daliy.flash.report</field>
     <field name="arch" type="xml">
         <tree>
            <field name="name"   />
            <field name="job"   />
         </tree>
     </field>
</record>

<record id="drill_flash_report_action" model="ir.actions.act_window">
        <field name="name">Net Revenue</field>
        <field name="res_model">daliy.flash.report</field>
        <field name="type">ir.actions.act_window</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree</field>
        <field name="context">{"search_default_group_period": 1}</field>
</record>

请注意您创建了名为 "report_view"

的视图
       CREATE OR REPLACE VIEW report_view AS (
          SELECT 
               id,name,job
            from   
               sales_summary limit 10
         ) 

因为你的对象是daliy.flash.report所以你默认的table你的对象是daliy_flash_report

_name = "daliy.flash.report"
_auto = False

它们是不同的,你应该确保对象的名称 table 与视图的名称相同。 解决方案:选择1或2。

  1. 您应该通过以下评论创建名为 daliy_flash_report 的视图
   CREATE OR REPLACE VIEW daliy_flash_report AS (
      SELECT 
           id,name,job
        from   
           sales_summary limit 10
     )
  1. 在您的对象中使用属性 _table 来指示 table 名称。
    class daily_flah_report_new(osv.osv):
       _name = "daliy.flash.report"
       _auto = False
       _table = "report_view"

祝你好运