Εισαγωγή
Όταν σε μια παραγγελία ορίζετε πόσα τεμάχια θέλει ο πελάτης, όταν μετράτε πόσες μέρες παραμένει ανοιχτό ένα task ή όταν βάζετε βαθμολογία προτεραιότητας σε ένα lead, χρησιμοποιείτε ένα Integer πεδίο. Πρόκειται για ένα από τα πιο διαδεδομένα πεδία στο μοντέλο δεδομένων του Odoo, που όμως πολλοί το θεωρούν απλό ή ασήμαντο — ενώ στην πράξη αποφάσεις σχεδιασμού γύρω από αυτό μπορεί να έχουν μεγάλο αντίκτυπο.
Η σωστή κατανόηση του Integer πεδίου είναι κρίσιμη για τρεις ομάδες: για τους χρήστες που φτιάχνουν και προσαρμόζουν φόρμες, για τους προγραμματιστές που γράφουν modules και για τους συμβούλους που σχεδιάζουν το data model για πελάτες. Μικρές λεπτομέρειες στη συμπεριφορά του μπορεί να αλλάξουν την αξιοπιστία και την απόδοση ενός συστήματος.
Αυτός ο οδηγός εξηγεί τι αποθηκεύει το Integer πεδίο, πώς συμπεριφέρεται στο πλαίσιο του Odoo (UI και ORM), πώς να το δημιουργήσετε είτε με Odoo Studio είτε με Python, καθώς και πρακτικές εφαρμογές και σημεία που απαιτούν προσοχή στην υλοποίηση.
Τι είναι το Integer πεδίο στο Odoo
Στο επίπεδο της βάσης δεδομένων, το Integer αποθηκεύει ακέραιες τιμές χωρίς δεκαδικά. Στη PostgreSQL χαρτογραφείται σε στήλη τύπου INTEGER (4 bytes), δηλαδή μπορεί να χειριστεί τιμές περίπου από -2 δισεκατομμύρια έως +2 δισεκατομμύρια — επαρκές για τους περισσότερους επιχειρηματικούς σκοπούς που απαιτούν ακέραιους αριθμούς.
Για τον χρήστη, το Integer εμφανίζεται στη φόρμα ως πεδίο εισαγωγής αριθμού και σε λίστες ως αριθμητική στήλη. Είναι ιδανικό για μετρήσεις που έχουν νόημα μόνο σε ακέραιες μονάδες: πλήθος τεμαχίων, βαθμολογίες, ημέρες, αριθμοί αλληλουχίας και γενικά όταν το μισό ή το τέταρτο της μονάδας δεν έχει νόημα.
Παρακάτω δείχνουμε το συνηθισμένο πώς ορίζεται σε κώδικα Python — πρόκειται για παράδειγμα ορισμού πεδίου σε ένα module.
from odoo import fields, models
class ProjectTask(models.Model):
_inherit = 'project.task'
estimated_hours = fields.Integer(
string='Estimated Hours',
default=0,
)
Η παράμετρος string καθορίζει την ετικέτα που βλέπει ο χρήστης στη διεπαφή. Η παράμετρος default επιτρέπει να προεπιλεγεί μια τιμή όταν δημιουργείται νέα εγγραφή.
Στο Odoo Studio το πεδίο εμφανίζεται ως Integer και, όταν το προσθέσετε χωρίς κώδικα, παίρνει αυτόματα τεχνικό όνομα με πρόθεμα x_studio_. Αν το ορίζετε μέσω Python ή API, εσείς επιλέγετε το τεχνικό όνομα της στήλης.
Πώς λειτουργεί το πεδίο
Κατά την εγκατάσταση ή την αναβάθμιση ενός module όπου ορίζεται το πεδίο, το Odoo δημιουργεί αυτόματα την αντίστοιχη στήλη στη βάση δεδομένων — δεν χρειάζεται χειροκίνητο SQL migration για τη στήλη του Integer.
Στο επίπεδο του ORM, το Odoo κάνει αυτόματη μετατροπή τύπων: ένα κενό Integer πεδίο επιστρέφει 0 αντί για None ή False. Αυτή η συμπεριφορά διαφέρει από τύπους όπως Float ή Char, οι οποίοι μπορούν να επιστρέψουν False όταν είναι κενά, και έχει σημασία όταν γράφετε λογικές που ελέγχουν «εάν έχει τιμή».
Βασικά χαρακτηριστικά του πεδίου
Ακολουθούν οι σημαντικότερες ιδιότητες που μπορείτε να ορίσετε για ένα Integer πεδίο.
- string: Η ετικέτα που φαίνεται στον χρήστη στη φόρμα ή στη λίστα.
- default: Η τιμή που παίρνει η νέα εγγραφή αν δεν δοθεί άλλη. Αν δεν οριστεί, το Odoo βάζει 0.
- required: Καθιστά το πεδίο υποχρεωτικό. Δεδομένου ότι η προεπιλεγμένη τιμή είναι ήδη 0, χρησιμοποιείται όταν θέλετε να απαγορεύσετε την αποθήκευση με μηδενική τιμή.
- readonly: Κάνει το πεδίο μη επεξεργάσιμο από τον χρήστη στη διεπαφή.
- index: Δημιουργεί ευρετήριο στη βάση πάνω στη στήλη — επιταχύνει φίλτρα και αναζητήσεις σε μεγάλα σύνολα δεδομένων.
- compute: Συνδέει μεθόδο Python που υπολογίζει δυναμικά την τιμή από άλλα πεδία.
- store: Σε συνδυασμό με compute, καθορίζει αν η υπολογισμένη τιμή αποθηκεύεται στη βάση ή επαναϋπολογίζεται κάθε φορά.
- copy: Ελέγχει αν η τιμή αντιγράφεται όταν διπλασιάζεται μια εγγραφή.
- groups: Περιορίζει την ορατότητα του πεδίου σε συγκεκριμένες ομάδες χρηστών.
Πώς φαίνεται στις προβολές
Σε φόρμες το Integer εμφανίζεται ως κουτί για αριθμητική εισαγωγή. Το Odoo προσθέτει χιλιαδιαίους διαχωριστές σε μεγάλους αριθμούς για καλύτερη αναγνωσιμότητα.
Σε λίστες τοποθετείται δεξιά από σύμβαση και εμφανίζεται ως απλός αριθμός. Στις αναζητήσεις επιτρέπει φίλτρα τύπου ίσο, μεγαλύτερο και μικρότερο.
Μπορείτε επίσης να συνδυάσετε το Integer με widgets για πιο ειδική απεικόνιση: π.χ. widget priority που μετατρέπει την τιμή σε «αστέρια» για προτεραιότητα, ή progressbar που εμφανίζει ένα ραβδογράφημα όταν υπάρχει ορισμένο μέγιστο.
Ενσωμάτωση με το ORM του Odoo
Για προγραμματιστές, η ανάγνωση και η εγγραφή σε Integer πεδία είναι απλή — στην Python είναι πάντα τύπου int. Προσοχή: το κενό πεδίο δίνει 0, επομένως έλεγχοι που ζητούν «υπάρχει τιμή;» πρέπει να λαμβάνουν υπόψη ότι 0 μπορεί να είναι νόμιμη τιμή ή ένδειξη μη-συμπλήρωσης.
Τα Integer πεδία χρησιμοποιούνται άνετα σε υπολογιζόμενα πεδία και σε domain φίλτρα που τρέχουν σε views, server actions και αυτοματισμούς σε όλο το σύστημα Odoo.
Επιχειρησιακά σενάρια χρήσης
Πού συναντάτε συχνά Integer πεδία σε πραγματικές εφαρμογές; Ακολουθούν πέντε καθημερινά παραδείγματα όπου παίζουν κεντρικό ρόλο.
1. CRM: Βαθμολογία leads
Στις εμπορικές ομάδες είναι συνηθισμένο να δίνουν «σκορ» σε leads για ταξινόμηση. Με ένα προσαρμοσμένο Integer πεδίο (π.χ. Lead Score) οι πωλητές μπορούν να βάζουν ή ένας αυτοματισμός να υπολογίζει βαθμολογία με βάση μέγεθος εταιρείας, προϋπολογισμό ή αλληλεπίδραση.
Έτσι γίνεται εύκολο να φιλτράρετε και να προτεραιοποιήσετε σωστά τις ευκαιρίες στο pipeline.
2. Πωλήσεις: Ελάχιστες ποσότητες παραγγελίας
Στα modules Πωλήσεων και Αποθήκης, τα Integer καθορίζουν τις ελάχιστες ποσότητες ανά προϊόν. Αν ορίσετε ελάχιστο 10, το σύστημα μπλοκάρει παραγγελίες κάτω από αυτό το όριο και αποφεύγετε επαναλαμβανόμενες συζητήσεις με πελάτες.
3. Αποθήκη: Κανόνες επαναπαραγγελίας
Οι κανόνες επαναπαραγγελίας στηρίζονται σε Integer πεδία για minimum και maximum stock. Όταν το απόθεμα πέσει κάτω από το minimum, το Odoo δημιουργεί παραγγελία αναπλήρωσης μέχρι το maximum — σωστή ρύθμιση αποτρέπει ελλείψεις αλλά και υπερστοκ.
4. Διαχείριση Έργων: Story points και εκτιμήσεις προσπάθειας
Ομάδες που δουλεύουν με agile στο Odoo Project συχνά προσθέτουν Integer πεδία για story points ή εκτιμώμενες ώρες. Το πεδίο εμφανίζεται σε κάρτες kanban ή λίστες και βοηθά στη μέτρηση φορτίου και ταχύτητας ανά sprint.
5. Λογιστική: Ημέρες όρων πληρωμής
Οι όροι πληρωμής καθορίζονται με Integer τιμές που αντιπροσωπεύουν ημέρες (π.χ. Net 30). Αυτές οι τιμές χρησιμοποιούνται άμεσα για τον υπολογισμό της ημερομηνίας λήξης τιμολογίου, πράγμα κρίσιμο για τη διαχείριση ρευστότητας.
Δημιουργία ή παραμετροποίηση του Integer πεδίου
Δύο τρόποι για να προσθέσετε Integer πεδίο σε μοντέλο Odoo: χωρίς κώδικα μέσω Odoo Studio ή τεχνικά με Python όταν χρειάζεστε μεγαλύτερο έλεγχο.
Χρήση Odoo Studio
Το Odoo Studio είναι το εργαλείο no-code/low-code μέσα στο Odoo για παραμετροποίηση πεδίων και views. Βήματα για προσθήκη Integer με Studio:
- Ανοίξτε τη φόρμα όπου θέλετε το νέο πεδίο.
- Ενεργοποιήστε το Studio από το μενού πάνω δεξιά.
- Στο πλαίσιο με τα πεδία αριστερά σύρτε το Integer πεδίο στη φόρμα.
- Ορίστε την ετικέτα, αν είναι υποχρεωτικό και την προεπιλεγμένη τιμή.
- Αποθηκεύστε και βγείτε από το Studio.
Το Studio δημιουργεί το πεδίο με πρόθεμα x_studio_ και αποθηκεύει τον ορισμό στο ir.model.fields — το πεδίο είναι άμεσα διαθέσιμο σε φόρμες και λίστες.
Χρήση Python (Τεχνική παραμετροποίηση)
Για προγραμματιστές που γράφουν custom modules, ο ορισμός γίνεται μέσα σε κλάση μοντέλου Python, προσφέροντας πλήρη έλεγχο στις ιδιότητες του πεδίου.
from odoo import fields, models
class CrmLead(models.Model):
_inherit = 'crm.lead'
x_lead_score = fields.Integer(
string='Lead Score',
default=0,
index=True,
help='Score from 0 to 100 used to prioritize opportunities',
)
Αφού προσθέσετε τον κώδικα, τρέξτε τον updater του module (π.χ. odoo-bin -u your_module) για να δημιουργηθεί η στήλη στη βάση — το Odoo αναλαμβάνει τη δημιουργία της στήλης.
Χρήση του XML-RPC API
Μπορείτε να δημιουργήσετε Integer πεδίο απομακρυσμένα μέσω XML-RPC, χρήσιμο για αυτοματοποιημένες ρυθμίσεις ή περιπτώσεις χωρίς άμεση πρόσβαση στον server.
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_lead_score',
'field_description': 'Lead Score',
'model_id': crm_lead_model_id,
'ttype': 'integer',
'state': 'manual',
}]
)
Το ttype για Integer είναι 'integer' και το state πρέπει να είναι 'manual' για να δηλώσετε ότι πρόκειται για custom πεδίο και όχι για πεδίο ορισμένο από module.
Προσθήκη υπολογιζόμενου (computed) Integer πεδίου
Τα computed Integer πεδία είναι χρήσιμα όταν θέλετε να προκύπτει τιμή αυτόματα, π.χ. να μετράτε ανοιχτά tasks ενός project.
class Project(models.Model):
_inherit = 'project.project'
open_task_count = fields.Integer(
string='Open Tasks',
compute='_compute_open_task_count',
store=True,
)
def _compute_open_task_count(self):
for project in self:
project.open_task_count = self.env['project.task'].search_count([
('project_id', '=', project.id),
('stage_id.fold', '=', False),
])
Το store=True αποθηκεύει το αποτέλεσμα στη βάση, πράγμα που επιτρέπει φιλτράρισμα και ταξινόμηση χωρίς να επαναϋπολογίζεται κάθε φορά — σημαντικό για απόδοση σε μεγάλες λίστες.
Καλές πρακτικές
Συμβουλές για να εκμεταλλευτείτε σωστά τα Integer πεδία
Χρησιμοποιήστε Integer για μετρήσεις σε ακέραιες μονάδες
Επιλέξτε Integer όταν η τιμή πρέπει οπωσδήποτε να είναι ακέραια. Αν εμπλέκεται χρήμα, μετρήσεις με δεκαδικά ή ποσότητες που επιτρέπουν κλασματικές τιμές, προτιμήστε Float ή Monetary αντίστοιχα.
Ορίστε λογική προεπιλεγμένη τιμή
Το Odoo βάζει 0 ως default. Συχνά αυτό είναι σωστό, αλλά σκεφτείτε αν το 0 έχει νόημα ή αν καλύτερα να προσθέσετε ένα βοηθητικό Boolean για να διακρίνετε «μη ορισμένο» από «μηδέν».
Προσθέστε index όταν θα φιλτράρετε συχνά
Αν θα φιλτράρετε, ομαδοποιείτε ή ταξινομείτε συχνά βάσει του πεδίου, χρησιμοποιήστε index=True. Το ευρετήριο επιταχύνει σημαντικά ερωτήματα σε μεγάλες βάσεις με μικρό κόστος σε χώρο και χρόνο εγγραφής.
Χρησιμοποιήστε store=True για computed πεδία που χρειάζονται φίλτρα
Αν το υπολογιζόμενο Integer θα χρησιμοποιηθεί σε domain φίλτρα ή group-by, βάλτε store=True ώστε το Odoo να μπορεί να το χρησιμοποιήσει στη βάση δεδομένων.
Τεκμηριώστε το εύρος τιμών
Όταν ένα Integer έχει γνώριμο εύρος (π.χ. 0–100 για score), προσθέστε help κειμενάκι για να ενημερώσετε τους χρήστες και να αποφύγετε λάθος εισαγωγές.
Σκεφτείτε προσεκτικά πριν αποθηκεύετε IDs σε Integer
Αν θέλετε να αναφέρετε άλλη εγγραφή, προτιμήστε Many2one αντί να σώσετε «χειροκίνητα» το ID σε Integer — το Many2one δίνει πλοήγηση, κανόνες κασκάδας και ορθή διαχείριση από το ORM.
Συνηθισμένα λάθη
Τα πιο συνηθισμένα λάθη με Integer fields
Μπερδευτικό Integer vs Float
Συχνό λάθος είναι να χρησιμοποιείται Integer όπου απαιτούνται δεκαδικά. Αν υπάρχει πιθανότητα να χρειαστείτε 1.5 ή 0.25, το Integer θα κόψει τα δεκαδικά και θα προκαλέσει απώλεια δεδομένων. Χρησιμοποιήστε Float ή Monetary όταν χρειάζεται ακρίβεια.
Υποθέτοντας ότι το μηδέν σημαίνει «κενό»
Επειδή ένα κενό Integer επιστρέφει 0, δεν μπορείτε να ξεχωρίσετε «δεν συμπληρώθηκε» από «έχει τιμή 0». Αν αυτή η διάκριση είναι απαραίτητη, προσθέστε ένα Boolean όπως has_score ή χρησιμοποιήστε άλλο τύπο που επιτρέπει False/None.
Ξεχάσατε index σε συχνά φιλτραρισμένα πεδία
Αν προσθέσετε πεδίο και μετά το χρησιμοποιήσετε συχνά σε φίλτρα χωρίς index, οι λίστες μπορεί να γίνουν αργές σε μεγάλη βάση. Είναι καλύτερα να προβλέψετε το index εξαρχής.
Χρησιμοποίηση Integer για ποσοστά με δεκαδικά
Αποθηκεύοντας ποσοστά ως ακέραιες μονάδες (π.χ. 75 για 75%) δουλεύει μέχρι να χρειαστεί 72.5%. Αν υπάρχει πιθανότητα δεκαδικών, προτιμήστε Float από την αρχή.
Ξεχάσατε store=True σε computed πεδίο που χρειάζεται φίλτρα
Ένα από τα πιο επαναλαμβανόμενα λάθη: computed Integer χωρίς store=True δεν μπορεί να χρησιμοποιηθεί σε domain φίλτρα, automated actions ή group-by. Σκεφτείτε πριν αν θα χρειαστεί αποθήκευση.
Συμπέρασμα
Το Integer πεδίο είναι ένα από τα βασικά δομικά στοιχεία στο μοντέλο δεδομένων του Odoo. Φαίνεται απλό, αλλά μικρά χαρακτηριστικά—όπως ότι τα κενά γυρίζουν 0 ή ότι τα computed πεδία χρειάζονται store=True για να φιλτράρονται—μπορούν να προκαλέσουν σφάλματα που είναι δύσκολα στην επιδιόρθωση αν αγνοηθούν νωρίς.
Είτε παραμετροποιείτε Odoo για μια εμπορική ομάδα, είτε γράφετε custom module, είτε σχεδιάζετε κανόνες επαναπαραγγελίας για αποθήκη, τα Integer πεδία θα εμφανιστούν παντού. Η σωστή χρήση τους σε συνδυασμό με Float/Monetary όπου χρειάζεται κάνει την υλοποίηση πιο στιβαρή και ευκολότερη στη συντήρηση.
Αν δουλεύετε σε παραμετροποίηση Odoo και θέλετε να βεβαιωθείτε ότι το data model θα γίνει σωστά από την αρχή, αυτή η βάση γνώσης αποδεικνύεται πολύτιμη σε όλη τη διάρκεια του έργου.
Συνεργαστείτε με έναν ειδικό Odoo
Στην εταιρεία Dasolo βοηθάμε οργανισμούς να υλοποιήσουν, να παραμετροποιήσουν και να βελτιστοποιήσουν το Odoo σε κάθε τομέα. Είτε χρειάζεστε καθαρό σχεδιασμό δεδομένων, custom πεδία και ροές εργασίας, είτε σύνδεση με εξωτερικά συστήματα μέσω API, έχουμε την εμπειρία για να το κάνουμε σωστά.
Έχετε απορίες για τη ρύθμιση του Odoo σας ή θέλετε να συζητήσουμε ένα έργο; επικοινωνήστε με την ομάδα μας. Είμαστε στη διάθεσή σας για βοήθεια.