Перейти к содержимому
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
Об этом форуме
Помощь

Using for loop when accessing/modifying fields vs using only self

Подписаться

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

Этот вопрос был отмечен
fieldsmodelscomputed-fields
2 Ответы
8444 Представления
Аватар
John Doe
If I have simple computed field like this:

@api.depends('field_a', 'field_b')
def _compute_field_c(self):
for record in self:
record.field_c = field_a + field_b
Should I use for loop here? It also works if I write: self.field_c = field_a + field_b.

When should I loop through self? If I write print(record) and click on item in the list view to open form view, it only prints one record, even in for loop. So maybe I don't have to use for loop in this case?


This question also applies to inverse functions and other ones that I think are supposed to use for loop.
0
Аватар
Отменить
Аватар
Sudhir Arya (ERP Harbor Consulting Services)
Лучший ответ

Without Depends:
For loop should be used if your compute method doesn't have any api.depends and you have added the computing field in the list/tree view since the system will call the compute method for all the active records in the list view.

With Depends:
If you use api depends on compute method and there could be the case that those depend fields get updated at the same time, in this case for loop is needed, otherwise, you will see an error of "singleton".

But I would recommend always use for loop to avoid any traceback in the future.

2
Аватар
Отменить
John Doe
Автор

Thanks. On the tutorial page I saw this example on custom actions:

from odoo import fields, models

class TestAction(models.Model):
_name = "test.action"

name = fields.Char()

def action_do_something(self):
for record in self:
record.name = "Something"
return True

Why is for loop used here? Do we need it? Because we're modifying very specific record as I understand it.

For example, there's a button "Action Something" in form view of some record. It doesn't refer to other records. We don't want to set "name" attribute for all records, only this one. I hope this makes sense. Would it be okay to do self.name = "something" in this example?

Or maybe loop is here because this action can be applied to lots of records as once?

Аватар
Waleed Mohsen (CorTex IT Solutions)
Лучший ответ

With computed fields I recommend to always use for loop, you will get an error if the fields appears in list view and not using store= True. So use for loop always with computed fields.

Read more in the below link:

https://www.odoo.com/documentation/14.0/developer/reference/addons/orm.html#computed-fields

1
Аватар
Отменить
John Doe
Автор

Thanks. On the tutorial page I saw this example on custom actions:

from odoo import fields, models

class TestAction(models.Model):
_name = "test.action"

name = fields.Char()

def action_do_something(self):
for record in self:
record.name = "Something"
return True

Why is for loop used here? Do we need it? Because we're modifying very specific record as I understand it.

For example, there's a button "Action Something" in form view of some record. It doesn't refer to other records. We don't want to set "name" attribute for all records, only this one. I hope this makes sense. Would it be okay to do self.name = "something" in this example?

Waleed Mohsen (CorTex IT Solutions)

If the action linked with button on form, you can use self.name = "something" without loop.
But sometimes you need to add this action to Actions menu as server action to apply the action to selected records from list view so you will write the server action

<record id="lunch_order_action_confirm" model="ir.actions.server">
<field name="name">Lunch: Receive meals</field>
<field name="model_id" ref="model_lunch_order"/>
<field name="binding_model_id" ref="model_lunch_order"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">records.action_confirm()</field>
</record>

As you can see the action_confirm methods called for selected record from form view and if write your code of method without loop then you will get an error.

So the summary you cannot use it without loop but its recomended to use loop.

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

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

Регистрация
Похожие посты Ответы Просмотры Активность
View a field from one model in another model Решено
fields models
Аватар
Аватар
1
нояб. 25
6163
How to find the field type? Решено
fields models
Аватар
Аватар
1
июн. 25
5982
need to get the computed fields related models dinamically
models computed-fields
Аватар
0
июн. 21
3120
Design a field value verification (not odoo.api.constrains validation)
fields models
Аватар
Аватар
Аватар
3
июл. 20
12817
Add base field (default_code) to a model (stock.quant)
fields models
Аватар
0
нояб. 16
5376
Сообщество
  • Видео уроки
  • Документация
  • Форум
Открытый исходный код
  • Скачать
  • 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