Skip to Content

Πεδίο Selection στο Odoo: Οδηγός Πλήρης και Εφαρμοστικός

Οδηγός για το πεδίο Selection στο μοντέλο δεδομένων του Odoo: από τα βασικά έως την προσαρμογή σε βάθος
6 Μαρτίου 2026 από
Πεδίο Selection στο Odoo: Οδηγός Πλήρης και Εφαρμοστικός
Dasolo
| No comments yet

Εισαγωγή


Κάθε φορά που σε ένα σύστημα Odoo ένας χρήστης επιλέγει την προτεραιότητα ενός lead, δηλώνει τρόπο πληρωμής ή ορίζει ένα προϊόν ως ενεργό/αρχείο, πολύ πιθανόν να δουλεύει με ένα πεδίο Selection. Είναι ένα απλό αλλά ισχυρό εργαλείο για να περιορίσεις τις επιλογές και να διασφαλίσεις ότι τα δεδομένα σου παραμένουν συνεπή και ευανάγνωστα.


Σε αντίθεση με ένα πεδίο ελεύθερου κειμένου όπου μπορεί να γραφτεί οτιδήποτε, το Selection περιορίζει την εισροή σε μια προκαθορισμένη λίστα επιλογών. Αυτή η αναγκαστική δομή μειώνει τα λάθη, βελτιώνει τα φίλτρα και τις αναφορές και αποτρέπει αποκλίσεις που αλλοιώνουν σταδιακά τις συγκεντρωτικές προβολές.


Αυτός ο οδηγός εξηγεί τι αποθηκεύει το πεδίο, πώς εμφανίζεται στις προβολές, και πώς να το δημιουργήσεις ή να το προσαρμόσεις — είτε με Odoo Studio, είτε με Python modules, είτε προγραμματικά μέσω XML-RPC. Περιλαμβάνει επίσης πρακτικά παραδείγματα από καθημερινές ροές εργασίας και τα συνηθέστερα λάθη που συναντάμε.

Τι είναι το πεδίο Selection στο Odoo


Στο ORM του Odoo, το Selection αποθηκεύει στην πραγματικότητα ένα string που αντιστοιχεί σε ένα σταθερό σύνολο επιλογών. Κάθε επιλογή έχει ένα τεχνικό κλειδί που αποθηκεύεται στη βάση και μία ετικέτα που βλέπει ο χρήστης στο interface.


Για να γίνει πιο κατανοητό: το πεδίο priority ορίζεται με μια σειρά επιλογών όπου το κάθε στοιχείο είναι (κλειδί, ετικέτα).

priority = fields.Selection([
    ('0', 'Normal'),
    ('1', 'Low'),
    ('2', 'High'),
    ('3', 'Very High'),
], string='Priority', default='0')

Στο παράδειγμα τα '0', '1' κ.λπ. είναι τα κλειδιά που μπαίνουν στη βάση, ενώ οι λέξεις Normal, Low, High είναι οι ετικέτες που βλέπει ο χρήστης. Αυτή η διάκριση επιτρέπει, ας πούμε, να αλλάζεις την επιγραφή χωρίς να σπας υπάρχοντα αρχεία.


Στο UI το Selection εμφανίζεται συνήθως ως dropdown σε φορμά. Σε πίνακες (list view) δείχνει την ανθρώπινη ετικέτα. Αν χρησιμοποιήσεις το widget badge, κάθε επιλογή προβάλλεται σαν χρωματιστή ετικέτα, ιδανική για πυκνές λίστες.


Στο Odoo Studio το πεδίο εμφανίζεται με την ονομασία Selection. Τα πεδία που προστίθενται από το Studio παίρνουν προεπιλογή τεχνικό όνομα με πρόθεμα x_studio_, ενώ αν το δηλώσεις με κώδικα επιλέγεις το δικό σου τεχνικό όνομα.

Πώς λειτουργεί το πεδίο


Στο μοντέλο δεδομένων, τα Selection πεδία αποθηκεύονται στη PostgreSQL ως VARCHAR και η βάση κρατά μόνο το κλειδί — ποτέ την ετικέτα. Αυτό είναι κρίσιμο όταν φτιάχνεις domain φίλτρα ή server actions: πρέπει να χρησιμοποιείς το κλειδί, όχι την ετικέτα.


Π.χ. για να βρεις όλα τα leads με υψηλή προτεραιότητα το domain είναι [('priority', '=', '2')] και όχι [('priority', '=', 'High')].

Βασικά χαρακτηριστικά πεδίου

Ακολουθούν τα πιο σημαντικά attributes που πρέπει να γνωρίζεις για ένα Selection στο Odoo:

  • selection: Η λίστα από (κλειδί, ετικέτα) που ορίζει τις επιλογές. Μπορεί επίσης να δοθεί ως όνομα μεθόδου (string) που επιστρέφει δυναμικά τη λίστα.
  • default: Το κλειδί που θα οριστεί όταν δεν έχει επιλεγεί τίποτα. Αν δεν δοθεί, το πεδίο ξεκινάει κενό.
  • required: Υποχρεώνει τον χρήστη να επιλέξει τιμή πριν την αποθήκευση. Σε συνδυασμό με default, είναι συχνά χρήσιμο για πεδία κατάστασης.
  • selection_add: Χρησιμοποιείται σε κληρονομικά modules για να προστεθούν νέες επιλογές σε υπάρχον Selection χωρίς να ξαναγραφτεί όλη η λίστα — η σωστή μέθοδος όταν επεκτείνεις native πεδία.
  • ondelete: Συνεργάζεται με το selection_add για να ορίσει τι γίνεται όταν αφαιρεθεί μια επιλογή όταν το module που την πρόσθεσε απεγκατασταθεί.

Στατικές vs Δυναμικές λίστες επιλογών

Κατά κανόνα οι επιλογές δηλώνονται στατικά όταν ορίζεις το πεδίο. Ωστόσο, μπορείς να δώσεις στο selection το όνομα μιας μεθόδου που θα κληθεί σε runtime για να φτιάξει τη λίστα δυναμικά — χρήσιμο όταν οι επιλογές εξαρτώνται από χρήστη, εταιρεία ή context.


contract_type = fields.Selection(
    selection='_get_contract_types',
    string='Contract Type'
)

def _get_contract_types(self):
    if self.env.user.has_group('hr.group_hr_manager'):
        return [('permanent', 'Permanent'), ('fixed', 'Fixed Term'), ('interim', 'Interim')]
    return [('permanent', 'Permanent'), ('fixed', 'Fixed Term')]

Πώς εμφανίζεται στις προβολές

Σε φορμά το Selection εμφανίζεται ως dropdown. Με το widget="badge" το πεδίο γίνεται χρωματιστή ετικέτα — χρήσιμο σε list και kanban για ορατότητα κατάστασης. Το widget="radio" δείχνει τις επιλογές ως inline radio buttons, ιδανικό όταν οι επιλογές είναι λίγες και θέλεις να φαίνονται όλες ταυτόχρονα.


Συνεργασία με το ORM του Odoo

Διαβάζεις και γράφεις την τιμή του Selection απευθείας με το κλειδί — το framework αναλαμβάνει την απεικόνιση της ετικέτας. Αν κάνεις fields_get μέσω XML-RPC, το attribute selection επιστρέφει το σύνολο των [key, label] ζευγών, χρήσιμο για εμφάνιση σε εξωτερικές εφαρμογές.


Περιπτώσεις χρήσης στην επιχείρηση


Το Selection συναντάται σχεδόν σε κάθε module σε ένα τυπικό Odoo. Παρακάτω πέντε συγκεκριμένα παραδείγματα από επιχειρησιακές ροές.


CRM: Προτεραιότητα lead και τύπος σταδίου

Η προτεραιότητα σε leads είναι συνήθως Selection με τέσσερα επίπεδα και βοηθά τις ομάδες πωλήσεων να κατευθύνουν τους πόρους τους. Χρησιμοποιείται για χρωματισμό σε kanban και για αυτοματισμούς που ενεργοποιούνται όταν ένα lead ανεβαίνει σε προτεραιότητα — ένα απλό πεδίο που βελτιώνει σημαντικά την ποιότητα των δεδομένων στο CRM.


Πωλήσεις: Όροι πληρωμής και πολιτική τιμολόγησης

Πεδία όπως το invoice_policy στα προϊόντα καθορίζουν εάν τιμολογείς βάση παραγγελίας ή παράδοσης — δηλαδή επηρεάζουν ολόκληρη τη ροή τιμολόγησης. Παρόμοια, οι τρόποι χρέωσης σε συνδρομές (προπληρωμή vs μεταπληρωμή) υλοποιούνται με Selection και έχουν άμεσο αντίκτυπο σε οικονομικές διεργασίες.


Αποθήκη: Καταστάσεις ποιότητας προϊόντων και παρτίδων

Στη παραγωγή και τον έλεγχο ποιότητας, τα Selection χρησιμοποιούνται για να παρακολουθούνται καταστάσεις παρτίδων, σειριακών αριθμών και εντολών επισκευής. Οι μεταβάσεις μεταξύ draft → confirmed → under repair → ready → done μπορούν να πυροδοτήσουν κινήσεις αποθέματος, emails ή λογιστικά εγγραφές — το Selection εδώ είναι το κέντρο ελέγχου της ροής.


Λογιστική: Τρόπος πληρωμής και τύπος ημερολογίου

Το πεδίο τύπου ημερολογίου (journal type) ξεχωρίζει π.χ. πωλήσεις, αγορές, ταμείο ή τράπεζα, και καθορίζει λογικές καταχωρίσεις και διαθέσιμους λογαριασμούς. Είναι παράδειγμα Selection που δεν απλώς «χαρακτηρίζει» ένα αρχείο, αλλά καθορίζει επιχειρησιακούς κανόνες.


HR: Τύπος απασχόλησης και κατάσταση συμβολαίου

Στο HR τα Selection πεδία τρέχουν καταστάσεις όπως τύπος απασχόλησης ή κατάσταση συμβολαίου (new → open → expired/cancelled). Αυτές οι τιμές ενεργοποιούν ειδοποιήσεις, λίστες onboarding και αλλαγές σε μισθοδοτικές ρυθμίσεις — το Selection κρατάει την κατάσταση που οδηγεί τις αυτοματοποιήσεις.

Δημιουργία ή προσαρμογή του Selection


Τρεις τρόποι να προσθέσεις Selection σε ένα μοντέλο Odoo, ανάλογα με το αν θέλεις γρήγορη αλλαγή ή version-controlled ανάπτυξη.


Χρήση Odoo Studio (χωρίς κώδικα)

Το Odoo Studio είναι το εργαλείο low-code για να προσθέτεις πεδία χωρίς Python. Βήματα για να προσθέσεις Selection με Studio:

  1. Άνοιξε το Odoo Studio από το κεντρικό μενού.
  2. Πήγαινε στη φόρμα όπου θέλεις να το προσθέσεις.
  3. Σύρε ένα Selection από την πλαϊνή στήλη πάνω στη φόρμα.
  4. Στο πάνελ ιδιοτήτων συμπλήρωσε τις επιλογές, προσθέτοντας μια ετικέτα για κάθε επιλογή.
  5. Προαιρετικά όρισε default και βάλε το πεδίο ως required αν χρειάζεται.
  6. Αποθήκευσε και κλείσε το Studio.

Το Studio αποθηκεύει κάθε επιλογή με αυτο-παραγόμενο κλειδί και την ετικέτα που έδωσες, δίνοντας στο πεδίο πρόθεμα x_studio_. Είναι ο ταχύτερος τρόπος για να δείξεις ένα proof-of-concept ή να κάνεις γρήγορες αλλαγές με πελάτη.


Χρήση Python σε custom module

Για ανάπτυξη που θέλει έλεγχο εκδόσεων και περιβάλλοντα, ορίζεις Selection σε Python αρχεία μοντέλων — η σωστή μέθοδος για παραγωγικές customizations:

from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    x_delivery_slot = fields.Selection([
        ('morning', 'Morning (8h - 12h)'),
        ('afternoon', 'Afternoon (13h - 17h)'),
        ('evening', 'Evening (18h - 20h)'),
    ], string='Delivery Slot', default='morning')

Μετά τον ορισμό, πρόσθεσε το πεδίο στο αντίστοιχο XML view ώστε να εμφανίζεται. Το Odoo δημιουργεί τη στήλη στη βάση όταν εγκαταστήσεις ή αναβαθμίσεις το module.


Όταν επεκτείνεις υπάρχον πεδίο με νέες επιλογές, προτίμησε το selection_add αντί να επαναορίσεις ολόκληρο το πεδίο:

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    state = fields.Selection(
        selection_add=[('custom_approval', 'Pending Approval')],
        ondelete={'custom_approval': 'set default'}
    )

Χρήση XML-RPC API

Αν αυτοματοποιείς την παραμετροποίηση —π.χ. σε scripts ανάπτυξης ή απομακρυσμένα εργαλεία— μπορείς να δημιουργήσεις Selection πεδία μέσω XML-RPC API:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_contract_category',
        'field_description': 'Contract Category',
        'model_id': model_id,
        'ttype': 'selection',
        'selection': "[('standard', 'Standard'), ('premium', 'Premium'), ('custom', 'Custom')]",
        'state': 'manual',
    }]
)

Σημείωσε ότι στο API η παράμετρος selection περνάει σαν string αναπαράσταση της Python λίστας. Το state: 'manual' δείχνει ότι το πεδίο δημιουργήθηκε χειροκίνητα — σωστό για πεδία από Studio ή API. Αυτή η μέθοδος διευκολύνει μαζικές ή απομακρυσμένες ρυθμίσεις.


Καλές πρακτικές


1. Χρησιμοποίησε νοηματικά και σταθερά κλειδιά

Το κλειδί είναι το τι αποθηκεύεται στη βάση και χρησιμοποιείται σε φίλτρα και αυτοματισμούς. Διάλεξε περιγραφικά, αμετάβλητα κλειδιά — μικρά, πεζά strings όπως 'draft', 'confirmed', 'cancelled'. Απόφυγε αριθμητικά κλειδιά αν δεν υπάρχει αποκλειστικός λόγος, γιατί δυσκολεύουν την ανάγνωση του κώδικα μετά από μήνες.


2. Κράτα τη λίστα μικρή και πλήρη

Αν έχεις πάνω από 8–10 επιλογές, μάλλον το πεδίο προσπαθεί να κάνει πολλά. Σκέψου αν ένας Many2one σε ένα μοντέλο ρυθμίσεων είναι πιο κατάλληλος — επιτρέπει στους χρήστες να διαχειρίζονται τις επιλογές χωρίς developer.


3. Βάλε default σε απαιτούμενα πεδία

Αν το πεδίο είναι required ορίζεις και ένα λογικό default για να αποφύγεις σφάλματα κατά τη δημιουργία εγγραφών μέσω import ή API. Το default πρέπει να αντιπροσωπεύει την πιο κοινή ή την πιο «μη δεσμευτική» κατάσταση.


4. Χρησιμοποίησε selection_add για επεκτάσεις native πεδίων

Για να προσθέσεις επιλογές σε υπάρχον πεδίο, προτίμησε selection_add ώστε να μην σπάσεις άλλες επεκτάσεις. Συνδύασέ το με ondelete για να διαχειριστείς την απεγκατάσταση του module.


5. Χρησιμοποίησε το widget badge για καλύτερη ορατότητα

Σε list και kanban προβολές πρόσθεσε widget="badge" στο XML ώστε οι τιμές να εμφανίζονται ως χρωματιστές ετικέτες — διευκολύνει το σκανάρισμα και την αναγνώριση κρίσιμων καταστάσεων.


Συνηθισμένα λάθη


Η αλλαγή κλειδιού σπάει υπάρχοντα δεδομένα

Μπορείς να αλλάξεις την ετικέτα με ασφάλεια, αλλά όχι το κλειδί αφού υπάρχουν αρχεία με αυτή την τιμή. Αν αλλάξεις κλειδί χωρίς μετανάστευση, τα υπάρχοντα records θα εμφανίζονται με κενή/άκυρη τιμή και τα φίλτρα ή αυτοματισμοί που βασίζονται στο παλιό κλειδί θα σταματήσουν να λειτουργούν. Σε περίπτωση ανάγκης, τρέξε script μετανάστευσης πριν την αλλαγή.


Η αφαίρεση επιλογής αφήνει ορφανά αρχεία

Αν σβήσεις μια επιλογή ενώ υπάρχουν εγγραφές με αυτό το κλειδί, αυτές οι εγγραφές θα εμφανίζουν χαλασμένη τιμή. Πριν αφαιρέσεις επιλογή, βρες και ενημέρωσε τα records ή αρχειοθέτησέ τα. Αυτό εμφανίζεται συχνά σε καθαρισμούς δεδομένων όταν οι επιλογές σχεδιάστηκαν επιπόλαια.


Χρήση της ετικέτας αντί του κλειδιού σε φίλτρα

Συνηθισμένο λάθος είναι να φτιάχνεις domain χρησιμοποιώντας την ανθρώπινη ετικέτα αντί του κλειδιού — το αποτέλεσμα επιστρέφει άδεια σύνολα χωρίς σφάλμα, κάτι που μπερδεύει. Έλεγξε πάντα τον ορισμό του πεδίου για να ξέρεις ποιο κλειδί αντιστοιχεί σε ποια ετικέτα.


Selection όπου χρειάζεται Many2one

Αν οι επιλογές αλλάζουν συχνά, αν οι χρήστες πρέπει να τις διαχειρίζονται μόνες τους, ή αν κάθε επιλογή έχει πρόσθετα πεδία (χρώμα, σειρά, λογαριασμό), τότε ένα Many2one σε μοντέλο ρυθμίσεων είναι προτιμότερο. Το Selection ταιριάζει σε σταθερές λίστες που διαχειρίζεται ο developer.


Μη διαχείριση κενής τιμής στη λογική του server

Ένα μη-required Selection μπορεί να έχει τιμή False. Αν ο κώδικας συγκρίνει απευθείας με string χωρίς να ελέγξει το False, θα προκύψουν απροσδόκητα αποτελέσματα ή σφάλματα. Πάντα χειρίζεσαι την κενή περίπτωση σε server actions και computed fields.

Συμπέρασμα


Το Selection είναι πεδίο που φαίνεται απλό αλλά έχει βάθος όταν καταλάβεις τη λειτουργία του: γνώση της διάκρισης κλειδιού/ετικέτας, πότε να χρησιμοποιείς selection_add και πότε Many2one, κάνουν τη διαφορά ανάμεσα σε μια σταθερή Odoo εγκατάσταση και μια που θα δημιουργεί προβλήματα στο μέλλον.


Είτε προσθέτεις τύπο συμβολαίου με Studio, είτε ορίζεις delivery slot σε custom module, είτε φτιάχνεις πεδίο κατάστασης ποιότητας μέσω API, τα μοτίβα αυτού του οδηγού σε βοηθούν να πάρεις σωστές αποφάσεις για κάθε περίπτωση χρήσης.

Στο μοντέλο δεδομένων του Odoo, το Selection είναι βασικό εργαλείο για να επιβάλλεις ποιότητα δεδομένων από την πηγή. Όταν το χρησιμοποιείς σωστά, κρατάει τα records καθαρά, τις αναφορές αξιόπιστες και τους αυτοματισμούς λειτουργικούς.

Στην Dasolo υποστηρίζουμε εταιρείες στην υλοποίηση, προσαρμογή και βελτιστοποίηση του Odoo σε όλο το φάσμα λειτουργιών. Αν χρειάζεσαι βοήθεια στο σχεδιασμό data model, στην προσθήκη πεδίων ή στην ανάπτυξη πλήρους module, αναλαμβάνουμε. Επικοινώνησε μαζί μας και ας συζητήσουμε το Odoo project σου.

Πεδίο Selection στο Odoo: Οδηγός Πλήρης και Εφαρμοστικός
Dasolo 6 Μαρτίου 2026
Share this post
Σύνδεση to leave a comment