Εισαγωγή
Το Boolean πεδίο είναι από τα πιο απλά αλλά και από τα πιο διαδεδομένα στοιχεία στο Odoo. Κάθε φορά που τσεκάρετε ένα κουτάκι σε μια παραγγελία, επισημαίνετε έναν πελάτη ως ενεργό ή προσθέτετε ένα προϊόν στα αγαπημένα, χειρίζεστε ένα Boolean πεδίο.
Παρά την απλότητά του, το Boolean πεδίο έχει συγκεκριμένες συμπεριφορές που αξίζει να γνωρίζετε. Το πότε πρέπει να το χρησιμοποιήσετε, πότε όχι και πώς να το ρυθμίσετε σωστά κάνει τη διαφορά σε ένα καθαρό, αξιόπιστο Odoo περιβάλλον — και προφυλάσσει από λάθη που κάνουν ακόμη και έμπειρες ομάδες.
Αυτός ο οδηγός εξετάζει το Boolean πεδίο από όλες τις πλευρές: τι αποθηκεύει, πώς εμφανίζεται στο μοντέλο δεδομένων και στη διεπαφή, πώς να το προσθέσετε ή να το επεκτείνετε με Studio ή Python, πρακτικά επιχειρηματικά παραδείγματα και χρήσιμες συμβουλές για να το αξιοποιήσετε στο έπακρο.
Τι είναι το Boolean πεδίο στο Odoo
Στο ORM του Odoo το Boolean πεδίο παίρνει μόνο δύο τιμές: True ή False. Στη βάση PostgreSQL αντιστοιχεί σε στήλη BOOLEAN. Δεν υπάρχει γκρίζα περιοχή: είτε είναι τσεκαρισμένο είτε όχι, ενεργό ή ανενεργό.
Για τον χρήστη το Boolean πεδίο εμφανίζεται συνήθως ως checkbox στις φόρμες. Στους πίνακες εμφανίζεται με ένα τσεκ ή κενό, ανάλογα με την τιμή. Σε κάποιες ρυθμίσεις μπορεί να εμφανίζεται ως διακόπτης (toggle) ανάλογα με το widget που έχετε επιλέξει.
Παρακάτω βλέπετε πώς δηλώνεται συνήθως ένα Boolean πεδίο σε ένα Python module του Odoo:
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Needs Manual Review',
default=False,
)
Η παράμετρος string ορίζει την ετικέτα που βλέπει ο χρήστης. Η default ορίζει την αρχική τιμή σε νέα εγγραφή. Αν δεν δηλωθεί, το Odoo θεωρεί το πεδίο False, αλλά είναι καλή συνήθεια να το δηλώνετε ρητά.
Στο Odoo Studio ο τύπος εμφανίζεται ως Checkbox. Όταν το φτιάχνετε από Studio, το τεχνικό όνομα παίρνει αυτόματα πρόθεμα x_studio_. Αν το δημιουργήσετε με Python ή XML-RPC, εσείς επιλέγετε το τεχνικό όνομα.
Πώς λειτουργεί το πεδίο
Όταν προσθέτετε ένα Boolean πεδίο σε ένα μοντέλο, το framework δημιουργεί την αντίστοιχη στήλη στη PostgreSQL κατά την εγκατάσταση ή αναβάθμιση του module. Δεν απαιτείται χειροκίνητη SQL μετανάστευση.
Σημείο κρίσιμο: στο Odoo ένα Boolean πεδίο ποτέ δεν επιστρέφει None ή NULL. Το ORM επιστρέφει πάντα True ή False. Ακόμα και αν η στήλη στη βάση είναι κενή, το Odoo θα δώσει False στην ανάγνωση. Αυτό διαφέρει από τύπους όπως Many2one ή Char, όπου ένα κενό μπορεί να εμφανιστεί ως False ή None και χρειάζεται προσοχή.
Κύρια χαρακτηριστικά πεδίου
Ακολουθούν οι βασικές ιδιότητες που μπορείτε να ρυθμίσετε για ένα Boolean πεδίο στο Odoo:
- default: Ορίζει την τιμή κατά τη δημιουργία νέας εγγραφής. Συνήθως
False, αλλά μπορεί να είναιTrueσε περιπτώσεις opt-out. - compute: Συνδέει μέθοδο Python που υπολογίζει δυναμικά την τιμή. Χρήσιμο για πεδία που προκύπτουν από την κατάσταση άλλων πεδίων.
- store: Σε συνδυασμό με
compute, καθορίζει αν η τιμή αποθηκεύεται στη βάση. Μεstore=Trueτα υπολογιζόμενα Boolean μπορούν να χρησιμοποιηθούν σε φίλτρα και εκθέσεις. - readonly: Απαγορεύει στον χρήστη να αλλάξει χειροκίνητα την τιμή στη διεπαφή. Συνηθισμένο για υπολογιζόμενα πεδία που ορίζει το σύστημα.
- copy: Ελέγχει αν η τιμή αντιγράφεται όταν κάνετε duplicate μια εγγραφή. Προεπιλογή
True. Για σημαίες όπως «έγκριση», συνιστάταιcopy=Falseώστε τα αντίγραφα να ξεκινούν καθαρά. - groups: Περιορίζει την προβολή και την επεξεργασία σε συγκεκριμένες ομάδες χρηστών.
Πώς εμφανίζεται στις views
Στις φόρμες το Boolean εμφανίζεται ως συνηθισμένο HTML checkbox. Στις λίστες, το Odoo δείχνει το εικονίδιο τσεκ για True και τίποτα για False, κάτι που διευκολύνει την γρήγορη ανασκόπηση.
Μπορείτε να αλλάξετε την εμφάνιση με widgets. Το widget toggle το δείχνει ως διακόπτη, ιδανικό για ρυθμίσεις. Για read-only προβολή, το boolean_favorite το εμφανίζει ως αστέρι — όπως συμβαίνει στα προϊόντα και στις επαφές του Odoo.
Χρήση Boolean πεδίων σε domain φίλτρα
Τα Boolean πεδία είναι πολύ βολικά σε domains — τα φίλτρα αναζήτησης, οι αυτοματισμοί και οι κανόνες πρόσβασης. Ένα φίλτρο για τσεκαρισμένες εγγραφές γράφεται έτσι:
[('needs_manual_review', '=', True)]
Επειδή υπάρχουν μόνο δύο τιμές, μπορείτε να γράψετε και απλά την ισοδυναμία χωρίς περίπλοκους τελεστές:
[('needs_manual_review', '=', False)]
Αυτή η απλότητα κάνει τα Boolean ιδανικά για αυτοματοποιήσεις, scheduled actions και server actions — εύκολα να ελεγχθούν και να ενεργοποιήσουν ροές χωρίς πολύπλοκες συνθήκες.
Αλληλεπίδραση με το Odoo ORM
Η ανάγνωση και η εγγραφή σε Boolean πεδία στην ανάπτυξη είναι άμεση: παίρνετε την τιμή από το αντικείμενο εγγραφής, τη συγκρίνετε με True/False και την αναθέτετε απευθείας. Το ORM φροντίζει τους υπόλοιπους χειρισμούς. Δεν υπάρχουν περίεργες μετατροπές ή serialization προβλήματα, και τα XML-RPC boolean αντιστοιχούν άψογα.
Περίπτωσεις χρήσης στις επιχειρήσεις
Τα Boolean πεδία εμφανίζονται σε όλα τα τμήματα μιας Odoo υλοποίησης. Ακολουθούν πέντε πρακτικά παραδείγματα από πραγματικές ροές εργασίας.
CRM: Σημείωση αν μία ευκαιρία είναι ποιοτικά επιβεβαιωμένη
Οι ομάδες πωλήσεων χρειάζονται συχνά έναν απλό τρόπο να ξεχωρίζουν τις ευκαιρίες που έχει αξιολογήσει ένας senior και θεωρούνται βιώσιμες. Ένα Boolean πεδίο is_qualified στο lead μοντέλο επιτρέπει γρήγορο φιλτράρισμα: οι μη-επιβεβαιωμένες ανατίθενται σε junior, ενώ οι επιβεβαιωμένες παίρνουν προτεραιότητα — χωρίς να δημιουργείτε ξεχωριστή φάση μόνο για αυτό.
Πωλήσεις: Επισημάνσεις παραγγελιών που χρειάζονται χειροκίνητο έλεγχο
Σε επιχειρήσεις όπου κάποιες παραγγελίες χρειάζονται επιπλέον έγκριση (π.χ. πάνω από ένα όριο ή από νέους πελάτες), ένα Boolean needs_manual_review στο sale.order, σε συνδυασμό με automated actions που το ορίζουν βάσει κανόνων, δημιουργεί μια σαφή ουρά εργασίας για το finance ή operations. Έτσι φιλτράρουν εύκολα τις προς έγκριση παραγγελίες.
Αποθήκη: Σήμανση προϊόντων εκτός καταλόγου
Όταν ένα προϊόν δεν πωλείται πλέον αλλά πρέπει να διατηρηθεί στο σύστημα για ιστορικούς λόγους, το αρχείο μπορεί να προκαλεί προβλήματα. Ένα Boolean is_discontinued στο product.template δείχνει άμεσα σε αγορές και πωλήσεις ότι το προϊόν δεν πρέπει να αναπαραγγελθεί ή να προσφερθεί. Μπορεί να χρησιμοποιηθεί σε φίλτρα τιμοκαταλόγων, κανόνες εγκρίσεων προμηθειών και ρυθμίσεις ορατότητας στο e-shop.
Λογιστήριο: Εντοπισμός τιμολογίων που χρειάζονται προσοχή
Το finance χρειάζεται καμιά φορά να επισημαίνει τιμολόγια υπό αμφισβήτηση ή με διαφορά τιμής. Αντί για σημειώσεις ελεύθερου κειμένου στο chatter, ένα Boolean under_dispute προσφέρει δομημένο τρόπο φιλτραρίσματος και αναφορών. Επίσης, μπορείτε να καταστείλετε υπενθυμίσεις για τιμολόγια με αυτό το flag ώστε να μην πιέζονται οι πελάτες μέχρι να λυθεί το θέμα.
HR: Παρακολούθηση ολοκλήρωσης πιστοποιήσεων ή εκπαίδευσης
Το HR χρειάζεται να διατηρείτε τεκμηριωμένα ποιος υπάλληλος ολοκλήρωσε υποχρεωτική εκπαίδευση ή έχει πιστοποίηση. Ένα Boolean στο employee record, π.χ. safety_training_completed, δίνει απλό, ελεγχόμενο τρόπο να φιλτράρετε ποιος απομένει. Τα δεδομένα αυτά τροφοδοτούν αναφορές συμμόρφωσης χωρίς την ανάγκη ξεχωριστού πολύπλοκου module.
Δημιουργία ή παραμετροποίηση του Boolean πεδίου
Υπάρχουν τρεις κύριοι τρόποι να προσθέσετε ένα Boolean πεδίο σε ένα μοντέλο Odoo, ανάλογα με το τεχνικό επίπεδο και τις ανάγκες προσαρμογής.
Χρήση Odoo Studio (χωρίς κώδικα)
Το Odoo Studio είναι το ενσωματωμένο low-code εργαλείο για να παραμετροποιείτε χωρίς Python ή XML. Για να προσθέσετε Boolean μέσω Studio:
- Ανοίξτε το Odoo Studio από το κύριο μενού (απαιτείται το app Studio).
- Πηγαίνετε στη φόρμα όπου θέλετε το πεδίο.
- Σύρετε ένα Checkbox από την πλαϊνή μπάρα στη διάταξη της φόρμας.
- Ορίστε την ετικέτα, την προεπιλογή και τυχόν απαιτήσεις ή readonly στο πάνελ ιδιοτήτων.
- Αποθηκεύστε και κλείστε το Studio.
Το Studio φροντίζει τα πάντα: το πεδίο δημιουργείται στη βάση με πρόθεμα x_studio_ και προστίθεται στη view. Δεν χρειάζεται επανεκκίνηση ή αναβάθμιση.
Χρήση Python σε custom module
Για developers που φτιάχνουν modules, τα Boolean δηλώνονται σε Python αρχεία μοντέλων. Αυτή είναι η συνιστώμενη μέθοδος για παραμετροποιήσεις που θέλετε σε version control, με tests και deployment:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_is_key_account = fields.Boolean(
string='Key Account',
default=False,
copy=False,
)
Μετά τη δήλωση, προσθέτετε το πεδίο στο αντίστοιχο XML view για να εμφανιστεί στη διεπαφή. Το Odoo θα δημιουργήσει τη στήλη στη βάση κατά την εγκατάσταση ή αναβάθμιση του module.
Για υπολογιζόμενα Boolean πεδία, το μοτίβο είναι το εξής:
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
is_high_value = fields.Boolean(
string='High Value Order',
compute='_compute_is_high_value',
store=True,
)
@api.depends('amount_total')
def _compute_is_high_value(self):
for order in self:
order.is_high_value = order.amount_total >= 10000
Με store=True η υπολογισμένη τιμή αποθηκεύεται στη βάση, επιτρέποντας χρήση σε φίλτρα και ομάδες λίστας χωρίς επανυπολογισμό σε κάθε φόρτωση.
Χρήση XML-RPC API
Αν διαχειρίζεστε παραμετροποιήσεις προγραμματικά — π.χ. σε pipeline ανάπτυξης ή απομακρυσμένα scripts — μπορείτε να δημιουργήσετε Boolean πεδία μέσω XML-RPC στο μοντέλο ir.model.fields:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_needs_manual_review',
'field_description': 'Needs Manual Review',
'model_id': model_id,
'ttype': 'boolean',
'state': 'manual',
}]
)
Η παράμετρος state: manual υποδεικνύει ότι το πεδίο δημιουργήθηκε έξω από module — σωστό για πεδία από Studio ή API. Πολλές εταιρείες το χρησιμοποιούν σε αυτοματοποιημένα workflows για μαζική παραμετροποίηση.
Καλές πρακτικές
1. Πάντοτε δηλώνετε default τιμή
Ακόμα κι αν το Odoo επιστρέφει False όταν δεν υπάρχει default, καλύτερα να ορίζετε ρητά default=False. Δείχνει ξεκάθαρα τη πρόθεση σε όποιον διαβάζει τον κώδικα και αποφεύγετε ασάφειες όταν το πεδίο χρησιμοποιείται σε αυτοματισμούς ή φίλτρα.
2. Ονομάζετε τα πεδία έτσι ώστε να διαβάζονται σαν ερωτήσεις
Τα Boolean λειτουργούν καλύτερα όταν το όνομα διαβάζεται ως ναι/όχι ερώτηση — π.χ. is_verified, needs_approval, has_warranty, is_key_account. Αποφύγετε αόριστα ονόματα όπως flag, status ή check που δεν περιγράφουν τι σημαίνει το πεδίο.
3. Βάζετε copy=False για σημαίες έγκρισης και κατάστασης
Αν το Boolean αντιπροσωπεύει κατάσταση που δεν πρέπει να μεταφέρεται κατά το duplicate (π.χ. "is approved"), βάλτε copy=False. Διαφορετικά, τα διπλότυπα θα κληρονομούν flags και μπορεί να δημιουργηθούν ψευδείς εγγραφές ως προς την κατάσταση.
4. Χρησιμοποιείτε υπολογιζόμενα Boolean για παράγωγες καταστάσεις
Αν η τιμή προκύπτει από άλλα πεδία, προτιμήστε compute fields με @api.depends() αντί να γράφετε server actions ή γράψιμο πεδίου διάσπαρτο σε κώδικα. Κρατάτε τη λογική συγκεντρωμένη, αυτοματοποιημένη και ευκολότερη στη συντήρηση.
5. Προσθέστε τα Boolean στη search view αν χρησιμοποιούνται για φιλτράρισμα
Αν οι χρήστες συχνά φιλτράρουν με βάση ένα Boolean, προσθέστε το στη search view — στο Studio ενεργοποιήστε την επιλογή αναζήτησης, στον κώδικα προσθέστε το στο <search>. Έτσι έχουν ένα κουμπί φίλτρου στην κορδέλα αναζήτησης αντί να ανοίγουν συνεχώς advanced filters.
Συνήθη λάθη
Χρήση Boolean για κατάσταση με περισσότερες από δύο επιλογές
Το πιο κοινό λάθος: θέλετε «pending/approved/rejected» και χρησιμοποιείτε Boolean. Σύντομα θα έχετε δύο ή τρία Boolean και η λογική γίνεται αδύνατη. Για πολλές καταστάσεις χρησιμοποιήστε Selection ή workflow, όχι Boolean.
Ξεχασμός του copy=False σε flags έγκρισης
Κατά το duplicate, όλα τα πεδία αντιγράφονται από προεπιλογή. Ένα παραγγελία που ήταν «approved» θα έχει το flag και στο αντίγραφο — αν το αντίγραφο πρέπει να ξεκινά καθαρό, βάλτε copy=False στα σχετικά flags.
Μη προσθήκη του πεδίου στη search view
Ένα Boolean που οι χρήστες πρέπει να φιλτράρουν αλλά δεν υπάρχει στη search view τους αναγκάζει να πηγαίνουν σε advanced filters κάθε φορά, επιβραδύνοντας δουλειές. Όταν προσθέτετε Boolean που θα χρησιμοποιηθεί για εύρεση εγγραφών, προσθέστε το αμέσως και στη search view.
Χρήση Boolean αντί του έτοιμου πεδίου active
Το Odoo έχει ήδη πεδίο active σε πολλά μοντέλα για να ελέγχει την ορατότητα εγγραφών. Αν σκοπός σας είναι να αποκρύψετε/αρχικοποιήσετε εγγραφές, χρησιμοποιήστε το native active αντί να φτιάξετε δικό σας μηχανισμό — έτσι παραμένετε συμβατοί με το UI και τα archive/unarchive actions.
Υπολογιζόμενα Boolean χωρίς store=True όταν τα θέλετε σε φίλτρα
Αν φτιάξετε compute Boolean και το χρησιμοποιήσετε σε search ή group χωρίς store=True, το Odoo θα δώσει σφάλμα ή θα αγνοήσει το φίλτρο. Μη αποθηκευόμενα computed πεδία υπάρχουν μόνο στη μνήμη και δεν συμμετέχουν σε SQL queries. Αν θέλετε φίλτρα/εκθέσεις, βάλτε store=True.
Συμπέρασμα
Το Boolean είναι το είδος του πεδίου που δεν προσέχουμε όταν δουλεύει σωστά — βρίσκεται παντού στο Odoo: από το active που ελέγχει ορατότητα μέχρι το is_published που κινεί το site και δεκάδες custom flags στις ροές των εταιρειών.
Κατανοώντας τη συμπεριφορά του στο μοντέλο δεδομένων, ρυθμίζοντάς το με σωστά defaults και attributes, και γνωρίζοντας πότε να το προτιμήσετε έναντι Selection ή άλλων τύπων, θα χτίσετε καθαρές, προβλέψιμες και εύκολα συντηρήσιμες Odoo υλοποιήσεις.
Ένα σωστά σχεδιασμένο Boolean γίνεται «αόρατο» στον τελικό χρήστη — απλώς λειτουργεί. Αν χρησιμοποιηθεί λάθος, δημιουργεί σύγχυση, αντιφάσεις κατάστασης και σωρεία workaround. Η διαφορά έρχεται από τη γνώση των κανόνων και τη συνεπή εφαρμογή τους.
Στην Dasolo βοηθάμε επιχειρήσεις να σχεδιάσουν, να παραμετροποιήσουν και να βελτιστοποιήσουν το Odoo σε όλο το φάσμα των λειτουργιών. Είτε χρειάζεστε καθαρό data model, προσαρμοσμένα πεδία στις ροές σας, είτε πλήρες custom module, η ομάδα μας μπορεί να υποστηρίξει το έργο σας. Επικοινωνήστε μαζί μας και ας συζητήσουμε το Odoo project σας.