Εισαγωγή
Αν έχετε ανεβάσει ποτέ φωτογραφία προϊόντος, λογότυπο εταιρείας ή φωτογραφία προφίλ εργαζομένου στο Odoo, έχετε ήδη χρησιμοποιήσει ένα πεδίο εικόνας. Είναι ίσως το πιο εμφανές πεδίο στο μοντέλο δεδομένων και εμφανίζεται σε περισσότερα σημεία από όσα φαντάζεται ο μέσος χρήστης.
Για τον τελικό χρήστη η διαδικασία μοιάζει απλή: κλικ, ανέβασμα, εικόνα έτοιμη. Όμως πίσω από αυτή τη νοητή απλότητα υπάρχουν μηχανισμοί αποθήκευσης, αυτόματης επεξεργασίας και λεπτομέρειες ασφαλείας που πρέπει να γνωρίζουν σύμβουλοι και προγραμματιστές πριν προσθέσουν πεδία εικόνας σε προσαρμοσμένα μοντέλα.
Αυτό το άρθρο εξηγεί τι αποθηκεύει ένα πεδίο Εικόνας, πώς συμπεριφέρεται μέσα στο πλαίσιο του Odoo, με ποιους τρόπους μπορείτε να το προσθέσετε (μέσω Studio ή Python) και παρέχει πρακτικά παραδείγματα από καθημερινές επιχειρηματικές ροές.
Τι είναι το πεδίο Εικόνας στο Odoo
Στις νεότερες εκδόσεις του Odoo υπάρχει ειδικός τύπος πεδίου για εικόνες: fields.Image (εμφανής από την έκδοση 13 και μετά). Παλαιότερα χρησιμοποιούσαν fields.Binary με κατάλληλο widget. Ο τύπος Image αναλαμβάνει πλέον το βασικό κύκλο ζωής της εικόνας — αποθήκευση, αλλαγή μεγέθους και απόδοση — χωρίς επιπλέον χειροκίνητες ρυθμίσεις.
Σε επίπεδο αποθήκευσης, οι εικόνες αποθηκεύονται ως δυαδικά δεδομένα σε μορφή base64. Στην πράξη, τα σύγχρονα Odoo αποθηκεύουν αυτά τα δεδομένα ως συνημμένα αρχεία (ir.attachment) αντί να φουσκώνουν τον πίνακα της εγγραφής, κάτι που επιταχύνει την εξυπηρέτηση και μειώνει το φόρτο στη βάση.
Πώς εμφανίζεται στο περιβάλλον χρήσης
Σε φόρμες, το πεδίο Εικόνας εμφανίζεται ως κενό προσαρμόσιμο σημείο όπου ο χρήστης μπορεί να ανεβάσει αρχείο από το μηχάνημα του ή, σε κάποιες περιπτώσεις, να επικολλήσει διεύθυνση URL. Προβάλλεται ως μικρογραφία μέσα στη φόρμα, δίνοντας άμεση οπτική αναγνώριση.
Σε λίστες τα πεδία εικόνας συνήθως αποφεύγονται γιατί οι μικρογραφίες επιβαρύνουν το φόρτο φόρτωσης. Αντίθετα, στις kanban κάρτες όπου το οπτικό στοιχείο βοηθά στην αναγνώριση, οι μικρές φωτογραφίες είναι ιδανικές.
Image vs Binary στο Odoo
Υπάρχει σημαντική διαφορά: το Binary χωράει κάθε τύπο αρχείου (PDF, ZIP, φύλλα εργασίας), ενώ το Image είναι ειδικά για εικόνες. Το Image εφαρμόζει επαλήθευση τύπου και αυτόματο resizing και έχει το κατάλληλο widget εξ ορισμού. Αποθηκεύστε έγγραφα σε Binary, φωτογραφίες και λογότυπα σε Image.
Πώς λειτουργεί το πεδίο
Όταν ένας χρήστης ανεβάζει εικόνα, το Odoo δεν την αποθηκεύει απλώς ως είχε — πραγματοποιεί επεξεργασία προτού την αποθηκεύσει.
Αυτόματο αλλαγή μεγέθους
Το πεδίο fields.Image δέχεται παραμέτρους max_width και max_height. Αν η εικόνα ξεπερνά αυτές τις διαστάσεις, το Odoo την επαναμετατρέπει διατηρώντας τον λόγο διαστάσεων. Η διαδικασία γίνεται στον αποθηκευτικό κύκλο, άρα για τον χρήστη είναι αδιαφανής και χωρίς επιπλέον βήματα.
Η προεπιλεγμένη μέγιστη πλευρά για ένα τυπικό Image πεδίο είναι 1920 pixels — γι' αυτό τα standard πεδία σε μοντέλα όπως product.template ή res.partner ονομάζονται συχνά image_1920.
Παραλλαγές μεγέθους εικόνας
Στα ενσωματωμένα μοντέλα υπάρχει συνήθως ένα σύνολο σχετιζόμενων πεδίων εικόνας: image_1920, image_1024, image_512, image_256, image_128. Πρόκειται για related fields που δείχνουν στην κύρια εικόνα αλλά αποθηκεύουν εκδοχές με διαφορετικά όρια μεγέθους.
Έτσι το σύστημα σερβίρει την κατάλληλη έκδοση ανά περίπτωση: μικρά thumbnails σε λίστες για γρήγορο φόρτωμα, μεγάλη έκδοση στη σελίδα προϊόντος για καθαρή απεικόνιση. Σε δικά σας custom μοντέλα αποφασίζετε αν χρειάζεστε αυτό το μοτίβο ανάλογα με τη χρήση.
Αποθήκευση ως συνημμένα
Εξ ορισμού τα Image πεδία αποθηκεύουν το περιεχόμενο ως αρχεία στο μοντέλο ir.attachment. Η εγγραφή κρατάει αναφορά στο attachment αντί να αποθηκεύει όλο το δυαδικό περιεχόμενο στον κύριο πίνακα.
Αυτό κρατάει τους βασικούς πίνακες πιο ελαφρούς και επιτρέπει στις εικόνες να είναι προσπελάσιμες μέσω προβλέψιμων URLs όπως /web/image/product.template/42/image_1920 — χρήσιμο για ιστοσελίδες, πρότυπα email και API.
Έλεγχος πρόσβασης
Οι εικόνες υπάγονται στους ίδιους κανόνες πρόσβασης με την εγγραφή. Αν ένας χρήστης δεν έχει δικαίωμα ανάγνωσης του προϊόντος, δεν θα μπορέσει να αποσπάσει και την εικόνα. Το Odoo διαχειρίζεται αυτόματα τα δικαιώματα, γεγονός κρίσιμο για δημόσιες σελίδες ή portals.
Πρακτικά επιχειρησιακά σενάρια
Το πεδίο Εικόνας συναντάται σε σχεδόν κάθε module του Odoo. Παρακάτω είναι οι πιο συνηθισμένες εφαρμογές.
1. Κατάλογος προϊόντων (Πωλήσεις & Αποθήκη)
Οι εικόνες προϊόντων είναι η πιο φανερή χρήση: κάθε product.template διαθέτει image_1920 και αυτές οι εικόνες εμφανίζονται στο ηλεκτρονικό κατάστημα, στα PDFs παραγγελιών, σε POS οθόνες και στις εφαρμογές αποστολών στο κινητό.
Εταιρείες με μεγάλα καταλόγους συχνά φορτώνουν τις εικόνες μαζικά μέσω API αντί να τις εισάγουν χειροκίνητα. Το πεδίο δέχεται base64 κωδικοποιημένα δεδομένα, οπότε είναι απλό να ανεβάσετε εικόνες προγραμματιστικά με XML-RPC ή JSON-RPC.
2. Λογότυπα πελατών και προμηθευτών (CRM & Προμήθειες)
Το μοντέλο res.partner διαθέτει πεδίο εικόνας για φωτογραφίες επαφών και λογότυπα εταιρειών. Η εικόνα εμφανίζεται στη φόρμα του συνεργάτη, στο chatter και στις kanban κάρτες του CRM — χρήσιμο για ομάδες πωλήσεων που διαχειρίζονται μεγάλο αριθμό λογαριασμών.
3. Φωτογραφίες εργαζομένων (HR)
Το hr.employee αποθηκεύει φωτογραφίες προσωπικού σε πεδίο Image. Αυτές εμφανίζονται στον κατάλογο προσωπικού, σε ορισμένες ρυθμίσεις σε αποδείξεις μισθοδοσίας και στο Discuss δίπλα στα μηνύματα. Στην πρόσληψη μεγάλης ομάδας συχνά χρησιμοποιείται μαζική εισαγωγή ή API.
4. Φωτογραφίες εξοπλισμού και περιουσιακών στοιχείων (Συντήρηση)
Στο module Συντήρησης μπορεί να προσαρτηθεί φωτογραφία σε εξοπλισμό. Οι τεχνικοί την βρίσκουν πολύ χρήσιμη για να επιβεβαιώσουν γρήγορα ποια μηχανή είναι πριν ξεκινήσουν την επισκευή.
5. Ειδικές φόρμες ελέγχου ή ποιότητας
Πολλές εταιρείες δημιουργούν προσαρμοσμένα μοντέλα για ελέγχους ποιότητας ή επιθεωρήσεις. Ένα πεδίο Εικόνας επιτρέπει στο προσωπικό πεδίου να επισυνάψει φωτογραφία ως αποδεικτικό απευθείας στην εγγραφή — ένα πολύ διαδεδομένο pattern, είτε προστεθεί μέσω Studio είτε με κώδικα Python.
Δημιουργία ή προσαρμογή του πεδίου
Υπάρχουν δύο βασικοί τρόποι προσθήκης πεδίου Εικόνας: χωρίς κώδικα μέσω Odoo Studio ή με Python για πιο λεπτομερή έλεγχο.
Χρήση Odoo Studio
Το Odoo Studio είναι το εργαλείο no-code. Ανοίγετε την εφαρμογή, ενεργοποιείτε το Studio και πάτε στη φόρμα όπου θέλετε το πεδίο.
Στην αριστερή πλαϊνή μπάρα σύρετε ένα πεδίο Image στη φόρμα. Το Studio ζητά ετικέτα και δημιουργεί το αντίστοιχο πεδίο στο μοντέλο αυτόματα — ιδανικό για functional consultants και χρήστες που θέλουν γρήγορες προσαρμογές χωρίς developer.
Τα πεδία που δημιουργούνται με Studio παίρνουν συχνά πρόθεμα x_studio_ (π.χ. x_studio_site_photo) και συμπεριφέρονται σαν εγγενή Image πεδία όσον αφορά αποθήκευση και απεικόνιση.
Χρήση Python (ανάπτυξη Odoo)
Για τεχνικές επεμβάσεις ορίζετε πεδία Image απευθείας σε αρχεία μοντέλων Python. Αυτό δίνει πλήρη έλεγχο παραμέτρων, συσχετίσεων και αποθήκευσης.
Παράδειγμα ορισμού σε Python για custom μοντέλο:
Στο παράδειγμα ορίζουμε μέγιστο όριο 1920px για την κύρια εικόνα και ένα related πεδίο photo_128 που αποθηκεύει μικρό thumbnail. Αυτό είναι το συνιστώμενο μοτίβο ανάπτυξης για να έχετε πολλαπλά μεγέθη εικόνας σε μία εγγραφή.
Προσθήκη του πεδίου στη θέα
Αφού το πεδίο υπάρχει στο μοντέλο, πρέπει να προστεθεί σε ένα view για να το βλέπουν οι χρήστες. Σε XML φόρμα δηλώνεται με widget="image".
<field name="photo" widget="image" class="oe_avatar"/>
Η κλάση oe_avatar τοποθετεί την εικόνα ως κυκλικό avatar πάνω αριστερά στη φόρμα — το συνηθισμένο στυλ Odoo. Μπορείτε επίσης να το τοποθετήσετε χωρίς την κλάση για ενσωμάτωση στο layout.
Καλές πρακτικές
Συστάσεις που δίνουμε σε πελάτες για χρήση των Image πεδίων στο Odoo.
Θέστε ρεαλιστικά όρια διαστάσεων
Το προεπιλεγμένο όριο των 1920px αρκεί για τις περισσότερες περιπτώσεις. Μην αυξάνετε το όριο αν δεν υπάρχει σαφής λόγος (π.χ. φωτογραφίες για εκτύπωση υψηλής ανάλυσης). Μεγαλύτερα αρχεία σημαίνουν μεγαλύτερες προσκολλήσεις και επιβάρυνση στη βάση και την ταχύτητα φόρτωσης.
Δημιουργήστε μικρή μικρογραφία για λίστες και kanban
Αν πρόκειται να εμφανίζεται η εικόνα σε λίστες ή kanban, ορίστε ξεχωριστό related πεδίο περιορισμένο σε 128 ή 256px. Το να φορτώσετε 128px thumbnail είναι πολύ πιο γρήγορο από το να τραβάτε την πλήρη εικόνα για κάθε κάρτα.
Χρησιμοποιήστε API για μαζικά ανέβασματα
Για εκατοντάδες ή χιλιάδες εικόνες αποφύγετε το χειροκίνητο ανέβασμα. Χρησιμοποιήστε XML-RPC/JSON-RPC και στείλτε base64 δεδομένα προγραμματιστικά — πολύ πιο γρήγορο και αυτοματοποιήσιμο.
Συμπιέστε τις εικόνες πριν το ανέβασμα
Ακόμη και μετά το resizing, το Odoo δεν συμπιέζει πάντα αρκετά. Μια JPEG 5 MB που αλλάζει μέγεθος σε 1920px μπορεί να παραμείνει αρκετά μεγάλη. Προ-συμπίεση πριν τη μεταφόρτωση μειώνει το μέγεθος των attachments, ιδιαίτερα σε μεγάλα καταλόγους.
Αποφύγετε εικόνες σε συχνά ερωτώμενες λίστες
Ένα Image πεδίο σε στήλη λίστας αναγκάζει το Odoo να φέρει δυαδικά για κάθε σειρά, επιβραδύνοντας τις λίστες. Χρησιμοποιήστε μικρό thumbnail αν χρειάζεται και κρατήστε την πλήρη εικόνα στη φόρμα.
Συνηθισμένα λάθη
Τα πιο συχνά λάθη που βλέπουμε όταν ομάδες αρχίζουν να δουλεύουν με Image πεδία.
Μπερδεύουν Binary με Image
Ένα Binary χωρίς image widget εμφανίζεται ως κουμπί λήψης, όχι ως προεπισκόπηση. Αν θέλετε απεικόνιση πρέπει είτε να χρησιμοποιήσετε fields.Image είτε να ορίσετε widget="image" σε fields.Binary. Αυτό μπερδεύει συχνά σε παλαιότερες εκδόσεις Odoo.
Δεν σκέφτονται τις παραλλαγές μεγέθους αρκετά νωρίς
Η προσθήκη ενός μεγάλου Image πεδίου είναι εύκολη, αλλά αν αργότερα χρειαστείτε μικρά thumbnails σε kanban ή website, η προσθήκη αυτών απαιτεί μετανάστευση βάσης σε custom module. Σχεδιάστε τα μεγέθη εξαρχής για να αποφύγετε προβλήματα.
Αποθήκευση εικόνων απευθείας στον πίνακα αντί ως attachments
Σε πολύ παλιές ή λανθασμένες ρυθμίσεις, τα δυαδικά μπορεί να φυλάσσονται μέσα στον κύριο πίνακα, φουσκώνοντας το μέγεθος και επιβραδύνοντας ερωτήματα. Βεβαιωθείτε ότι η εγκατάσταση χρησιμοποιεί αποθήκευση αρχείων ή S3-compatible storage για attachments.
Χρήση Image για έγγραφα
Κάποιοι προσπαθούν να βάλουν σαρωμένα αρχεία ή πολυσέλιδα έγγραφα σε Image πεδία. Αν και γίνεται τεχνικά, δεν είναι σωστό εργαλείο. Για έγγραφα προτιμήστε το Documents module ή Binary με download widget — τα Image είναι για φωτογραφίες/λογότυπα.
Ξεχνάνε κανόνες πρόσβασης σε δημόσιες σελίδες
Αν εμφανίζετε εικόνες σε δημόσια website ή portal αλλά οι εγγραφές δεν είναι προσβάσιμες στο κοινό, το URL της εικόνας θα δίνει 404. Όταν φτιάχνετε δημόσιες σελίδες, ελέγξτε ότι τα δικαιώματα της εικόνας ταιριάζουν με το κοινό.
Συμπέρασμα
Το πεδίο Εικόνας φαίνεται απλό, αλλά έχει αρκετές λεπτομέρειες που μπερδεύουν αν δεν προγραμματίσετε. Κατανόηση του resizing, της αποθήκευσης ως attachments και του μοτίβου πολλαπλών μεγεθών θα σας γλιτώσει χρόνο κατά τη διαμόρφωση μοντέλων με οπτικά δεδομένα.
Για επιχειρησιακούς χρήστες, η γνώση ότι οι εικόνες φυλάσσονται με ασφάλεια και έχουν προβλέψιμες διευθύνσεις βοηθά στον σχεδιασμό website και portal. Για developers, το ζευγάρι fields.Image + related thumbnails είναι το standard pattern που αξίζει να μάθετε από νωρίς.
Είτε προσθέτετε φωτογραφία προϊόντος, είτε κρατάτε φωτογραφία επιθεώρησης σε custom μοντέλο, είτε φτιάχνετε portal με λογότυπα πελατών — το πεδίο Εικόνας προσφέρει μια καθαρή και ενσωματωμένη λύση για οπτικά δεδομένα στο Odoo.
Χρειάζεστε βοήθεια με την υλοποίηση του Odoo;
Στην Dasolo βοηθάμε επιχειρήσεις να υλοποιήσουν, προσαρμόσουν και βελτιστοποιήσουν το Odoo σε όλα τα modules και εκδόσεις. Είτε χρειάζεστε ρύθμιση πεδίων σε standard μοντέλα, ανάπτυξη custom modules ή μετανάστευση δεδομένων από legacy συστήματα, συνεργαζόμαστε πρακτικά με την ομάδα σας για να τρέξει το Odoo όπως πραγματικά δουλεύει η επιχείρησή σας.
Αν έχετε απορίες για το περιβάλλον Odoo σας ή θέλετε να διερευνήσετε τις δυνατότητες της πλατφόρμας, επικοινωνήστε μαζί μαςκαι θα χαρούμε να βοηθήσουμε.