首页 > 解决方案 > Odoo14:模块无法安装 - 取消安装

问题描述

我正在使用 Odoo 14,但在尝试为事件安装自定义模块时无法安装。我不知道我哪里出错了。在应用程序下,在我的模块上显示了一个名为“取消安装”的按钮。我想创建一个名为“事件”的新模块。我在 model.py 和 views.xml 的代码下面附上了。请指导我,因为我是 Python 和 Odoo 14 的新手。

# -*- coding: utf-8 -*-

import base64
from werkzeug.urls import url_encode

from odoo import models, fields, api
from datetime import datetime
from odoo.modules.module import get_module_resource


class Events(models.Model):
    _name = 'test-events'
    _description = 'test-events'
    _order = 'name'

    name = fields.Char(string="Event Name", size=200, store=True, readonly=False)
    description = fields.Text(string="Description")
    event_type = fields.Integer(string="Event Type", required=True)
    status = fields.Integer(string="Status", required=True)
    start_at = fields.Datetime.to_string(datetime.datetime.now(string="Start at", help='Event Start Date & Time', required=True))
    end_at = fields.Datetime.to_string(datetime.datetime.now(string="End at", help='Event End Date & Time', required=True))
    created_at = fields.Datetime.now(string="Created at", help='Event Create Date & Time', required=True)
    updated_at = fields.Datetime.to_string(datetime.datetime.now(string="Updated at", help='Event Update Date & Time', required=True))
    thumbnail_url = fields.Char(string="Thumbnail URL", size=500, help='Event Image URL', required=True)

    @api.model
    def _default_image(self):
        image_path = get_module_resource('events', 'img', 'default_image.png')
        return base64.b64encode(open(image_path, 'rb').read())

    image_1920 = fields.Image(default=_default_image)

 

    @api.model
    def create(self, vals):
        """Method Override for allocate leaves to the employee."""
        if vals.get('id'):
            user = self.env['test-events'].browse(vals['id'])
            vals.update(self._sync_user(user, vals.get('image_1920') == self._default_image()))
            vals['name'] = vals.get('name', user.name)
        events = super(Events, self).create(vals)
        url = '/web#%s' % url_encode({
            'active_id': events.id,
            'active_model': 'test-events',
        })
        events_allocations = self.env['test-events']
        for events_allocation in events_allocations:
            events_dict = {
                'name': events_allocation.name,
                'description': events_allocation.description,
                'event_type': events_allocation.event_type,
                'status': events_allocation.status,
                'start_at': events_allocation.start_at,
                'end_at': events_allocation.end_at,
                'created_at': events_allocation.created_at,
                'updated_at': events_allocation.updated_at,
                'thumbnail_url': url,
            }
            new_allocation = self.env['test-events'].create(events_dict)
            new_allocation.sudo().action_approve()
        return events

以上是我的model.py 文件。下面是我的views.xml 文件。

<odoo>
  <data>
    <!-- explicit list view definition -->

    <record model="ir.ui.view" id="events.list">
      <field name="name">events list</field>
      <field name="model">test-events</field>
      <field name="arch" type="xml">
        <tree>
          <field name="name"/>
          <field name="description"/>
          <field name="event_type"/>
          <field name="status"/>
          <field name="start_at"/>
          <field name="end_at"/>
          <field name="created_at"/>
          <field name="updated_at"/>
        </tree>
      </field>
    </record>

    <record id="test_events_view_form" model="ir.ui.view">
            <field name="name">test-events.form</field>
            <field name="model">test-events</field>
            <field name="arch" type="xml">
                <form string="Events" create="0" write="0" js_class="events_form">
                    <header/>
                    <sheet>
                        <field name="image_1920" widget='image' class="oe_avatar" options='{"zoom": true, "preview_image":"image_128"}'/>
                            <div class="oe_title">
                                <label for="name" class="oe_edit_only"/>
                                <h1>
                                    <field name="name" placeholder="Events's Name" required="True"/>
                                </h1>
                                <h2>
                                    <field name="description" placeholder="Event's Description" />
                                </h2>
                            </div>
                            <group>
                                <group>
                                    <field name="event_type"/>
                                    <field name="start_at"/>
                                    <field name="created_at"/>
                                </group>
                                <group>
                                    <field name="status"/>
                                    <field name="end_at"/>
                                    <field name="updated_at"/>
                                </group>
                            </group>
                    </sheet>
                </form>
            </field>
        </record>


    <!-- actions opening views on models -->

    <record model="ir.actions.act_window" id="action_event_view">
      <field name="name">Events</field>
        <field name="type">ir.actions.act_window</field>
      <field name="res_model">test-events</field>
      <field name="view_mode">kanban,calendar,tree,form,pivot,graph</field>
    </record>
    <!-- server action to the one above -->

    <record model="ir.actions.server" id="events.action_server">
      <field name="name">events server</field>
      <field name="model_id" ref="model_events_events"/>
      <field name="state">code</field>
      <field name="code">
        action = {
          "type": "ir.actions.act_window",
          "view_mode": "kanban,calendar,tree,form,pivot,graph",
          "res_model": test-events,
        }
      </field>
    </record>


    <!-- Top menu item -->
    <!-- MAIN MENU -->
    <menuitem name="Events"
        id="events_main_menu"
        web_icon="event,static/description/icon.png"/>

    <!-- HEADER: EVENTS -->
    <menuitem name="Events"
        id="header_menu_events"
        parent="events_main_menu"/>
  </data>
</odoo>

接下来是我的清单.py 文件。请帮帮我。我真的不确定我们哪里错了。odoo

# -*- coding: utf-8 -*-
{
    'name': "events",

    'summary': """
        Organize, publish, and manage on-site & online events """,

    'description': """
        An all-in-one event management platform, capable of handling events of any type or scale. Odoo 
        Events covers all aspects of an Event Planner's job from organize, publish, and manage events 
        like Conferences, Webinars, Meetings, Classes, Registrations, Charity, Exhibitions, and Festivals.
    """,

    'author': "My Company",
    'website': "http://www.yourcompany.com",

    # Categories can be used to filter modules in modules listing
    # Check https://github.com/odoo/odoo/blob/14.0/odoo/addons/base/data/ir_module_category_data.xml
    # for the full list
    'category': 'Marketing/Events',
    'version': '0.1',

    # any module necessary for this one to work correctly
    'depends': ['base', 'base_setup', 'mail', 'portal', 'utm'],

    # always loaded
    'data': [
        # 'security/ir.model.access.csv',
        'views/views.xml',
        'views/templates.xml',
    ],
    # only loaded in demonstration mode
    'demo': [
        'demo/demo.xml',
    ],
    'installable': True,
    'auto_install': False,
}

标签: pythonxmleventspython-3.6odoo-14

解决方案


考虑使用标准方式创建自定义模块:

  odoo-bin scaffold events ~/src/user/ 

它将为您的模块创建默认访问规则,您可以将现有代码复制/粘贴到标准目录(模块、控件、视图、数据......)更多信息(官方文档):https://www.odoo。 com/documentation/14.0/administration/odoo_sh/getting_started/first_module.html


推荐阅读