تخطي للذهاب إلى المحتوى
أودو القائمة
  • تسجيل الدخول
  • جرب مجاناً
  • التطبيقات
    المالية
    • المحاسبة
    • فوترة
    • النفقات
    • جدول البيانات (BI)
    • المستندات
    • توقيع إلكتروني
    المبيعات
    • إدارة علاقات العملاء
    • المبيعات
    • نقطة البيع للمتاجر
    • نقطة البيع للمطاعم
    • الاشتراكات
    • تأجير
    المواقع الإلكترونية
    • أداة بناء المواقع الإلكترونية
    • متاجر إلكترونية
    • مدونة
    • المنتدى
    • دردشة مباشرة
    • التعليم الإلكتروني
    سلسلة التوريد
    • المستودعات
    • التصنيع
    • إدارة دورة حياة المنتج
    • المشتريات
    • الصيانة
    • الجودة
    الموارد البشرية
    • موظفون
    • التوظيف
    • إجازة عمل
    • التقييمات
    • الإحالات
    • تطبيق الأسطول
    التسويق
    • التسويق الإجتماعي
    • التسويق عبر البريد الإلكتروني
    • التسويق عبر الرسائل النصية
    • فعاليات
    • أتمتة التسويق
    • الاستطلاعات
    الخدمات
    • المشاريع
    • الجداول الزمنية
    • الخدمة الميدانية
    • مكتب المساعدة
    • التخطيط
    • مواعيد
    اﻹنتاجية
    • مناقشة
    • الموافقات
    • إنترنت الأشياء "IoT"
    • بروتوكول ربط المحادثات الصوتية عبر الإنترنت
    • المعرفة
    • WhatsApp
    التطبيقات الخارجية ستوديو أودو منصة أودو السحابية
  • قطاعات الأعمال
    البيع بالتجزئة
    • متجر كتب
    • متجر ملابس
    • متجر أثاث
    • متجر بقالة
    • متجر معدات
    • متجر ألعاب
    الطعام والضيافة
    • بار وحانة
    • المطعم
    • مطعم للوجبات السريعة
    • نزل للضيوف
    • موزّع مشروبات
    • فندق
    العقارات
    • وكالة عقارات
    • شركة هندسة معمارية
    • البناء
    • إدارة العقارات
    • العناية بالحدائق
    • اتحاد مُلاّك العقارات
    استشارة
    • مؤسسة محاسبية
    • شريك أودو
    • وكالة تسويقية
    • منشأة قانونية
    • استقطاب المواهب
    • التدقيق والتوثيق
    التصنيع
    • الأقمشة
    • معدني
    • الأثاث
    • الطعام
    • مصنع خمور
    • هدايا الشركات
    الصحة واللياقة البدنية
    • نادي رياضي
    • متجر نظارات
    • مركز لياقة بدنية
    • الممارسون الصحيون
    • صيدلية
    • صالون تصفيف الشعر
    التجارة
    • عامل صيانة
    • الأجهزة والمعدات التقنية ودعمها
    • أنظمة الطاقة الشمسية
    • صانع أحذية
    • خدمات التنظيف
    • خدمات التكييف (HVAC)
    غير ذلك
    • منظمة غير ربحية
    • وكالة بيئية
    • تأجير لوحات إعلانية
    • تصوير
    • تأجير دراجات
    • بائع وسيط للبرمجيات
    تصفح كافة قطاعات الأعمال
  • مجتمع أودو
    تعلم
    • دروس
    • التوثيق
    • شهادات
    • التدريب
    • مدونة
    • بودكاست
    قم بتعزيز التعليم
    • برنامج تعليم
    • Scale UP! لعبة الأعمال
    • قم بزيارة أودو
    احصل على البرنامج
    • تحميل
    • قارنْ الإصدارات
    • إطلاق
    تعاون
    • جيت هاب "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:

  • إدارة علاقات العملاء
  • e-Commerce
  • المحاسبة
  • المخزون
  • PoS
  • المشروع
  • MRP
All apps
يجب أن تكون مسجلاً حتى تتفاعل مع المجتمع.
كافة المنشورات الأفراد الشارات
علامات التصنيف (عرض الكل)
odoo accounting v14 pos v15
حول هذا المنتدى
يجب أن تكون مسجلاً حتى تتفاعل مع المجتمع.
كافة المنشورات الأفراد الشارات
علامات التصنيف (عرض الكل)
odoo accounting v14 pos v15
حول هذا المنتدى
المساعدة

🔍 Odoo 17 : How to Search Compute Fields Without store=True in Python (Backend)?

اشتراك

تسلم الإشعارات عندما يكون هناك نشاط في هذا المنشور

لقد تم الإبلاغ عن هذا السؤال
computed-fieldsodoo-developmentodoo-customization
1 الرد
2072 أدوات العرض
الصورة الرمزية
Rushik Pitroda
✅ Problem Statement (with Code Example)

from odoo import models, fields, api

import logging

_logger = logging.getLogger(__name__)


class ComputeDemo(models.Model):

    _name = 'compute.demo'

    _description = 'Compute Demo Model'


    age = fields.Integer(string="Age")

    compute_age = fields.Integer(string="Compute Age", compute="_compute_based_on_age", store=False)


    @api.depends('age')

    def _compute_based_on_age(self):

        for rec in self:

            rec.compute_age = rec.age


    def click_me(self):

        data = self.search([('compute_age', '=', 10)])

        if data:

            _logger.info("Search Data Found: %s", data)

        else:

            _logger.info("Search Data Not Found: %s", data)

Log : Non-stored field compute.demo.compute_age cannot be searched.


Can anyone guide me ?

Any help would be highly appreciated 🙏

Thanks in advance!

1
الصورة الرمزية
إهمال
الصورة الرمزية
Christoph Farnleitner
أفضل إجابة

Note: Since your example code lacks meaning, the answer may as well. This is because in the given scenario you may as well just define a related field rather than a computed one.


In general, the reason why you can not search for a non-stored field using ORM methods directly is the fact that ultimately a search (domain) is converted to an actual SQL SELECT statement - and this statement, since it's executed on the database, can only search for information actually stored in the database.
In return this means that whatever computation happens for any given computed field, would need happen on-the-fly while searching - which could pretty quickly result in poor performance.


To search for values in a computed field you can define a search method used for that field. See also 'searching on a computed field' in https://www.odoo.com/documentation/17.0/developer/reference/backend/orm.html#computed-fields.


So, in your example this would look like this:

    age = fields.Integer(string='Age')
compute_age = fields.Integer(string='Compute Age',
compute='_compute_compute_age',
search='_search_compute_age', # defines 'how' to search
store=False)

    def _search_compute_age(self, operator, value):
# According to the compute method, there is a direct link between
# 'age' and 'compute_age', thus you can search for 'age' directly.
#  In case there is a processing happening of 'age', you will have
# to reflect this in the 'value' variable and reverse the logic.
        # As an example:
# if _compute_compute_age() does something like 'compute_age = age * 10',
# you will have to, in return, search for 'compute_age / 10' as
# this is your 'age' actually stored.
        return [('age', operator, value)]

    @api.depends('age')
    def _compute_compute_age(self):
        for rec in self:
            rec.compute_age = rec.age

    def action_search_compute_age(self):
        data = self.search([('compute_age', '=', 10)])
        if data:
            _logger.info('Search Data Found: %s', data)
        else:
            _logger.info('Search Data Not Found: %s', data)


While this works, you may still reconsider your approach and whether this field really can not be stored in the database, especially since it is needed for search operations.

The heavier the computation gets, the heavier the load on the database will be every time this field is to be rendered (and this gets multiplied by the number of records shown in a list view for example).

0
الصورة الرمزية
إهمال
Rushik Pitroda
الكاتب

Thank you so much for the detailed explanation!
Really appreciate your time and guidance! 😊

هل أعجبك النقاش؟ لا تكن مستمعاً فقط. شاركنا!

أنشئ حساباً اليوم لتستمتع بالخصائص الحصرية، وتفاعل مع مجتمعنا الرائع!

تسجيل
المنشورات ذات الصلة الردود أدوات العرض النشاط
How to Set Decimal Accuracy for a Custom Float Field
odoo18 odoo17 odoo-development odoo-customization
الصورة الرمزية
الصورة الرمزية
1
يونيو 25
1902
Cursor closed error during large CSV import via cron job in Odoo.sh
database cronjob odoo18 odoo-development odoo-customization
الصورة الرمزية
الصورة الرمزية
1
يونيو 25
2053
ValueError: forbidden opcode(s) in 'lambda': STORE_ATTR
computed-fields
الصورة الرمزية
الصورة الرمزية
1
يونيو 25
16887
Make stored compute filed recompute after changing it logic but not depedencies.
computed-fields
الصورة الرمزية
الصورة الرمزية
الصورة الرمزية
الصورة الرمزية
3
أبريل 25
7489
Compute Fields تم الحل
computed-fields
الصورة الرمزية
الصورة الرمزية
2
يوليو 24
9294
المجتمع
  • دروس
  • التوثيق
  • المنتدى
مصدر مفتوح
  • تحميل
  • جيت هاب "Github"
  • المشغل الآلي رنبوت
  • الترجمات
خدماتنا
  • استضافة أودو إس إتش
  • الدعم
  • الترقية
  • التطويرات المخصصة
  • التعليم
  • اعثر على محاسب
  • اعثر على شريك
  • كنْ شريكاً
معلومات عنا
  • شركتنا
  • أصول العلامة التجارية
  • اتصلْ بنا
  • الوظائف
  • فعاليات
  • بودكاست
  • مدونة
  • عملاء
  • قانوني • الخصوصية
  • الحماية
الْعَرَبيّة 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

أودو هو عبارة عن مجموعة من تطبيقات الأعمال مفتوحة المصدر التي تغطي جميع احتياجات شركتك، مثل: إدارة علاقات العملاء والتجارة الإلكترونية والمحاسبة والمخزون ونقاط البيع وإدارة المشاريع وما إلى ذلك.

ما يجعل من أودو مميزاً هو هدفه بأن يكون سهل الاستخدام للغاية ومتكاملاً تمامًا في الوقت ذاته.

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