Перейти к содержимому
Odoo Меню
  • Войти
  • Попробовать бесплатно
  • Модули
    Финансы
    • Бухгалтерия
    • Выставление счетов
    • Расходы
    • Таблицы
    • Документооборот
    • Подпись
    Продажи
    • CRM
    • Продажи
    • POS Магазин
    • POS Ресторан
    • Подписки
    • Аренда
    Вебсайты
    • Конструктор вебсайтов
    • eCommerce
    • Блог
    • Форум
    • Онлайн-чат
    • Электронное обучение
    Логистика
    • Склад
    • Производство
    • PLM
    • Закупки
    • Обслуживание
    • Качество
    Отдел кадров
    • Сотрудники
    • Подбор персонала
    • Отпуска
    • Оценка персонала
    • Реферальная программа
    • Автопарк
    Маркетинг
    • SMM
    • E-mail рассылки
    • СМС рассылки
    • Мероприятия
    • Автоматизация маркетинга
    • Опросы
    Услуги
    • Проекты
    • Табели
    • Выездной сервис
    • Поддержка
    • Планирование
    • Встречи
    Продуктивность
    • Обсуждения
    • Согласование
    • IoT
    • VoIP-телефония
    • Knowledge
    • WhatsApp
    Сторонние приложения Модуль Студия Odoo Платформа Odoo Cloud
  • Индустрии
    Розничная торговля
    • Книжный магазин
    • Магазин одежды
    • Мебельный магазин
    • Продуктовый магазин
    • Строительный магазин
    • Магазин игрушек
    Гостинично-ресторанный бизнес
    • Бар и паб
    • Ресторан
    • Фастфуд
    • Гостевой дом
    • Дистрибьютор напитков
    • Отель
    Недвижимость
    • Агентство недвижимости
    • Архитектурное бюро
    • Строительство
    • Управление недвижимостью
    • Ландшафтный дизайн
    • Товарищество собственников жилья
    Консалтинг
    • Бухгалтерская фирма
    • Партнер Odoo
    • Маркетинговое агентство
    • Юридическая фирма
    • Подбор персонала
    • Аудиторское бюро
    Производство
    • Текстиль
    • Металл
    • Мебель
    • Продукты питания
    • Пивоварня
    • Корпоративные сувениры
    Здоровье и фитнес
    • Спортивный комплекс
    • Магазин оптики
    • Фитнес-клуб
    • Велнес-центр
    • Аптека
    • Салон красоты
    Услуги
    • Специалист по бытовым услугам
    • Продажа и обслуживание IT-оборудования
    • Солнечные энергосистемы
    • Производство обуви
    • Клининг
    • Системы ОВКВ
    Прочее
    • Некоммерческая организация
    • Консалтинг в сфере устойчивого развития
    • Аренда рекламных щитов
    • Бизнес по фотосъемке
    • Прокат велосипедов
    • Реселлер программного обеспечения
    Все индустрии
  • Community
    Обучение
    • Видео уроки
    • Документация
    • Сертификация
    • Тренинг
    • Блог
    • Подкаст
    Образование и развитие
    • Образовательная программа
    • Деловая игра Scale Up!
    • Экскурсия в офис Odoo
    ПО
    • Скачать
    • Сравнить версии
    • Релизы
    Сотрудничество
    • Github
    • Форум
    • Мероприятия
    • Перевод
    • Стать партнером
    • Услуги для партнеров
    • Зарегистрировать бухгалтерскую фирму
    Услуги
    • Найти партнера
    • Найти бухгалтера
    • Встреча с экспертом
    • Услуги по внедрению
    • Отзывы клиентов
    • Поддержка
    • Обновления
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Заказать демонстрацию
  • Цены
  • Поддержка

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Бухгалтерия
  • Склад
  • PoS
  • Проекты
  • MRP
All apps
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Все посты Люди Значки
Теги (Смотреть все)
odoo accounting v14 pos v15
Об этом форуме
Чтобы взаимодействовать с сообществом, необходимо зарегистрироваться.
Все посты Люди Значки
Теги (Смотреть все)
odoo accounting v14 pos v15
Об этом форуме
Помощь

I can't understand how wizards work

Подписаться

Получайте уведомления о появлении активности в этом посте

Этот вопрос был отмечен
wizardsodooV8
2 Ответы
11242 Представления
Аватар
Uillino

I'm trying to create a wizard, but I'm confused about how a wizard works.

This is mymodule.py:

# -*- encoding: utf-8 -*-
from openerp import models, fields

class mymodule_attivita(models.Model):
_name = 'mymodule.tbl_attivita'
_description = 'Tabella Attivita'

scode_attivita_contr = fields.Char('Code', size=1, required=True)
sdescrizione = fields.Text('Descrizione', equired=True)

and this is mymodule_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_mymodule_attivita" model="ir.ui.view">
<field name="name">mymodule view</field>
<field name="model">mymodule.tbl_attivita</field>
<field name="arch" type="xml">
<form string="mymodule Attivita">
<sheet>
<notebook>
<page string="Tab 1">
<group name="top">
<group name="left">
<field name="scode_attivita_contr"/>
<field name="sdescrizione"/>
</group>
</group>
</page>
<page string="Tab 2">
<group name="top">
<group name="left">
<field name="id" attrs="{'invisible': [('write_date', '=', False)]}"/>
<field name="write_date" attrs="{'invisible': [('write_date', '=', False)]}"/> 
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
               <act_window id="action_bridge_attivita" name="Attivita" res_model="mymodule.tbl_attivita" view_mode="tree,form" />
                <menuitem id="menu_mymodule_attivita" name="Menu mymodule Attivita" parent="mail.mail_feeds" sequence="20" action="action_mymodule_attivita" />
 
    </data>
</openerp>

So, I have a form with 2 fields (plus id and write_date that I've set invisible).

I would like to create a wizard to open a page with a button Pushing this button, Odoo has to open the model 'mymodule.tbl_attivita'. So, I've written this wizard.py file:

# -*- encoding: utf-8 -*-
from openerp import models, api

class wizard(models.TransientModel):
_name = 'mymodule.wizard'
_description = "Wizard

@api.multi
def crea_attivita(self):
return {
'type': 'ir.actions.act_window',
'res_model': 'mymodule.tbl_attivita',
'view_type': 'form',
'view_mode': 'form',
'target': 'new',
}

with this wizard_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_mymodule_wizard_form" model="ir.ui.view">
<field name="name">Wizard</field>
<field name="model">mymodule.wizard</field>
<field name="arch" type="xml">
<form string="mymodule Wizard">
<sheet>
<group name="top">
<group name="left">
<h1>Demo Wizard</h1>
</group>
<group name="right">
<button type="object"
name="crea_attivita"
string="Create Attivita"/>

                                                </group>
                                     </group>
                             </sheet>


<footer>

<button string="cancella" special="cancel"/>

</footer>

</form>

</field>

</record>


<record id="view_mymodule_wizard" model="ir.actions.act_window">

<field name="name">Select link</field>

<field name="type">ir.actions.act_window</field>

<field name="res_model">mymodule.wizard</field>

<field name="view_type">form</field>

<field name="view_mode">form</field>

<field name="target">new</field>

</record>

 

<act_window id="action_mymodule_wizard" name="Attivita" res_model="mymodule.wizard" view_mode="tree,form" /> 

<menuitem id="menu_mymodule_wizard" name="Menu mymodule Wizard" parent="mail.mail_feeds" sequence="40" action="action_mymodule_wizard" />

</data>

</openerp>

In this way, I have a link 'Attivita' in the 'Messaging' menu. When I click on it, I open the wizard and I could click on 'Create' and then I could click on the button 'Create Attivita'. At this point, I have a pop up with the field of the model mymodule.tbl_attivita, without the option for saving my data.

I think that there is something about wizard that I haven't understood. Could anyone explain me what is missing?

1
Аватар
Отменить
Аватар
Bole
Лучший ответ

First you need to understand the difference between models.Model and models.TransientModel... 

models.Model class is intended for permanently storing data in database... 

models.TransientModel is intended for temporary data, very simmilar to sql view , and most wizards will use TransientModel for storing data.. this is the main reason why you do not have option to save the data while on wizard screen.

If i got your need right, you would like to create some activity record and store it in database... 
If that is so, you should create a view on models.Model subclass (tbl_attivita! ) and you have no need to create a wizard.. 

That view can be opened as a popup window the way you opened wizard class (your code) but the class itself should be Model instead of TransientModel...


hope it helps a bit.. 


2
Аватар
Отменить
Аватар
Rihene
Лучший ответ

Here is an example.

your_wizard.xml

<record model="ir.ui.view" id="wizard_with_step_form">

<field name="name">wizard_with_step.form</field>

<field name="model">wizard_with_step</field>

<field name="type">form</field>

<field name="arch" type="xml">

<form string="Wizard with step" version="7.0">

<field invisible="1" name="state" />

<group states="step1">

<field name="name1" />

</group>

<group states="step2">

<field name="name2" />

</group>

<footer states="step1">

<button name="action_next" string="Next" type="object" />

</footer>

<footer states="step2">

<button name="action_previous" string="Previous" type="object" />

</footer>

</form>

</field>

</record>

your_wizard.py


class wizard_with_step(osv.osv_memory):

_name = 'wizard_with_step'

_description = 'Wizard with step'

_columns = {

'name1': fields.char('Name 1',),

'name2': fields.char('Name 2',),

'state': fields.selection([('step1', 'step1'),('step2', 'step2')])

}

def action_next(self, cr, uid, ids, context=None):

#your treatment to click button next

#...

# update state to step2

self.write(cr, uid, ids, {'state': 'step2',}, context=context)

#return view

return {

'type': 'ir.actions.act_window',

'res_model': 'your_wizard',

'view_mode': 'form',

'view_type': 'form',

'res_id': this.id,

'views': [(False, 'form')],

'target': 'new',

}

def action_previous(self, cr, uid, ids, context=None):

#your treatment to click button previous

#...

# update state to step1

self.write(cr, uid, ids, {'state': 'step1',}, context=context)

#return view

return {

'type': 'ir.actions.act_window',

'res_model': 'your_wizard',

'view_mode': 'form',

'view_type': 'form',

'res_id': this.id,

'views': [(False, 'form')],

'target': 'new',

}

}

Here some useful links:

http://odoo-documents.readthedocs.org/en/latest/howtos/backend.html#wizards 

http://stackoverflow.com/questions/23005623/how-to-create-wizards-openerp

 

1
Аватар
Отменить
Не оставайтесь в стороне – присоединяйтесь к обсуждению!

Создайте аккаунт сегодня, чтобы получить доступ к эксклюзивным функциям и стать частью нашего замечательного сообщества!

Регистрация
Похожие посты Ответы Просмотры Активность
CONFIGURACION DE CORREO PROPIO POR PRUMERA VEZ
odooV8
Аватар
0
мар. 25
2054
How to remove model if not in the py files anymore
odooV8
Аватар
0
янв. 25
4362
Start odoo server automatically in Ubuntu 14.04 on reboot Решено
odooV8
Аватар
Аватар
1
авг. 23
15983
change password Решено
odooV8
Аватар
Аватар
1
авг. 23
14556
Creating tables with %for and %endfor in email templates - Odoo is putting my loop outside the table, not inside.
odooV8
Аватар
Аватар
1
июл. 23
11884
Сообщество
  • Видео уроки
  • Документация
  • Форум
Открытый исходный код
  • Скачать
  • Github
  • Runbot
  • Перевод
Услуги
  • Хостинг Odoo.sh
  • Поддержка
  • Обновление
  • Индивидуальные решения по доработке
  • Образование
  • Найти бухгалтера
  • Найти партнера
  • Стать партнером
О нас
  • Наша компания
  • Активы бренда
  • Cвяжитесь с нами
  • Вакансии
  • Мероприятия
  • Подкаст
  • Блог
  • Клиенты
  • Правовые документы • Конфиденциальность
  • Безопасность
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo – это набор бизнес-модулей с открытым исходным кодом, который закроет все потребности вашей компании: CRM, E-commerce, Бухгалтерия, Склад, POS, управление проектами и др.

Odoo сочетает в себе простоту использования и полную интеграцию всех бизнес-процессов в одной системе.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now