AttributeError: тип объекта '######' не имеет атрибута ######### ' - PullRequest
0 голосов
/ 21 января 2019

есть кнопка буксировки для форм, чтобы переключить все записи, вторая кнопка, чтобы очистить все выполненные записи, но это не работает, но генерирует ошибку «AttributeError: тип объекта« todo.task »не имеет атрибута« do_toggle_done »» что такое искажение по атрибуту и ​​как его можно добавить для обеих кнопок

ОШИБКА, ЭТО ПРОИСХОДИТ С ОБОИМИ КНОПКАМИ

        (# -*- coding: utf-8 -*-
    from odoo import models, fields, api


    class TodoTask(models.Model):
        _name = 'todo.task'
        _description = 'To-do Task'

        name = fields.Char('Description', required=True)
        is_done = fields.Boolean('Done?')
        active = fields.Boolean('Active?', default=True)

        @api.multi
        def do_toggle_done(self):
            for task in self:
                task.is_done = not task.is_done
            return True

        @api.model
        def do_clear_done(self):
            dones = self.search([('is_done', '=', True)])
            dones.write({'active': False})
            return True
    )

  THIS IS THE XML CODE 

       <?xml version="1.0"?>
    <odoo>

        <!-- To-Do Task Form view -->
        <record id="view_form_todo_task" model="ir.ui.view">
          <field name="name">To-do Task Form</field>
          <field name="model">todo.task</field>
          <field name="arch" type="xml">

            <form>
              <header>
                <button name="do_toggle_done" type="object"
                        string="Toggle Done" class="oe_highlight"/>
                <button name="do_clear_done" type="object"
                        string="Clear All Done" />
              </header>
              <sheet>
                <group name="group_top">
                  <group name="group_left">
                    <field name="name"/>
                  </group>
                  <group name="group_right">
                    <field name="is_done"/>
                    <field name="active" readonly="1"/>
                  </group>
                </group>
              </sheet>
            </form>

          </field>
        </record>

        <!-- To-Do Task List view -->
        <record id="view_tree_todo_task" model="ir.ui.view">
          <field name="name">To-do Task Tree</field>
          <field name="model">todo.task</field>
          <field name="arch" type="xml">
            <tree colors="decoration-muted: is_done==True">
              <field name="name"/>
              <field name="is_done"/>
            </tree>
          </field>
        </record>

        <!-- To-Do Task Search view -->
        <!--<record id="view_filter_todo_task" model="ir.ui.view">-->
          <!--<field name="name">To-do Task Filter</field>-->
          <!--<field name="model">todo.task</field>-->
          <!--<field name="arch" type="xml">-->
            <!--<search>-->
              <!--<field name="name"/>-->
              <!--<filter string="Not Done" domain="[('is_done','=',False)]"/>-->
              <!--<filter string="Done" domain="[('is_done','!=',False)]"/>-->
            <!--</search>-->
          <!--</field>-->
        <!--</record>-->

    </odoo>

это ошибка массажа

Odoo Server Error
Traceback (most recent call last):
  File "/odoo/odoo-server/odoo/http.py", line 654, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/odoo/odoo-server/odoo/http.py", line 312, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/odoo/odoo-server/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/odoo/odoo-server/odoo/http.py", line 696, in dispatch
    result = self._call_function(**self.params)
  File "/odoo/odoo-server/odoo/http.py", line 344, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/odoo/odoo-server/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/odoo/odoo-server/odoo/http.py", line 337, in checked_call
    result = self.endpoint(*a, **kw)
  File "/odoo/odoo-server/odoo/http.py", line 939, in __call__
    return self.method(*args, **kw)
  File "/odoo/odoo-server/odoo/http.py", line 517, in response_wrap
    response = f(*args, **kw)
  File "/odoo/odoo-server/addons/web/controllers/main.py", line 966, in call_button
    action = self._call_kw(model, method, args, {})
  File "/odoo/odoo-server/addons/web/controllers/main.py", line 954, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/odoo/odoo-server/odoo/api.py", line 742, in call_kw
    method = getattr(type(model), name)
AttributeError: type object 'todo.task' has no attribute 'do_toggle_done'

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Попробуйте перезапустить odoo и обновить модуль, у меня это сработало.

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

Кнопка вызова напрямую связана с текущими активными model и recordset.Вам нужно использовать @api.multi для работы с object типом button.Измените методы кнопок с помощью @api.multi декораторов.Все остальное кажется хорошим с вашим кодом.Должно работать отлично.

...