Halo Kak Siska,
Wah, ini pertanyaan yang bagus banget dan sering dialami teman-teman praktisi Odoo lain juga lho! Memang, tampilannya jadi kurang informatif kalau yang muncul cuma ID angka saja, apalagi buat user yang setiap hari pakai Odoo. Pengennya kan langsung baca nama, ya.
Di Odoo, ketika sebuah field mereferensikan ke model lain (misalnya dari Sales Order ke Customer `res.partner`), tipe field ini biasanya adalah
Many2one. Secara database, yang tersimpan memang
ID angka dari record yang direferensikan. Tapi, Odoo sudah punya mekanisme pintar untuk secara otomatis menampilkan
nama atau
display_name dari record tersebut di antarmuka pengguna (UI).
Jadi, intinya, kita perlu memastikan bahwa di custom report atau view yang Kak Siska buat, kita mengakses field tersebut dengan cara yang benar agar Odoo bisa menampilkan namanya.
---
Berikut adalah beberapa best practice dan cara efisien untuk mengatasi masalah ini:
---
1.
Untuk Custom XML Views (Tree atau Form View):
Biasanya, kalau Kak Siska punya field
Many2one, cukup dengan memanggil nama field-nya saja di XML, Odoo sudah akan menampilkan nama dari record tersebut.
Misalnya, jika di model Kak Siska ada field bernama
partner_id yang merujuk ke
res.partner, cukup tulis begini di view XML-nya:
<field name="partner_id"/> Odoo akan otomatis mengambil nama dari partner yang punya ID tersebut. Kalau yang muncul masih ID, mungkin ada kondisi khusus di field tersebut atau cara pemanggilannya. Tapi secara standar, begini sudah cukup.
---
2.
Untuk QWeb Reports:
Nah, ini yang paling sering jadi kendala di
QWeb Reports. Karena di QWeb kita "lebih dekat" ke data mentah, kita perlu secara eksplisit meminta nama dari record terkait.
Misalnya, jika variabel
o adalah objek record yang sedang diproses di report, dan
o punya field Many2one bernama
partner_id (merujuk ke
res.partner), untuk menampilkan nama partner-nya, Kak Siska bisa pakai:
<span t-field="o.partner_id.display_name"/> atau
<span t-esc="o.partner_id.name"/> Perbedaannya:
t-field: Ini adalah cara yang lebih "Odoo-way" karena dia juga akan menghormati format display field yang sudah diatur di Odoo. Ini sangat disarankan.
t-esc: Ini langsung mencetak nilai dari atribut name (atau display_name) dari objek terkait. Biasanya untuk nama, name dan display_name akan sama.
Contoh lain:
- Untuk produk:
<span t-field="o.product_id.display_name"/>
- Untuk karyawan:
<span t-field="o.employee_id.display_name"/>
Pastikan field seperti
product_id atau
employee_id adalah field Many2one ke model yang benar ya.
---
3.
Untuk Computed Fields yang Menghasilkan ID (Kasus Spesifik):
Kadang, ada juga kasus di mana Kak Siska membuat
computed field yang nilainya adalah ID dari record lain, bukan field Many2one secara langsung. Jika ingin menampilkan namanya, Kak Siska bisa mendefinisikan computed field itu sebagai
Many2one juga.
Misalnya, Kak Siska punya field integer
some_partner_id_integer yang menyimpan ID partner, dan Kak Siska ingin menampilkan namanya:
Di
file .py (model Python):
```python
from odoo import models, fields, api
class YourModel(models.Model):
_name = 'your.custom.model'
_description = 'Your Custom Model'
# ...
some_partner_id_integer = fields.Integer(string="Partner ID Raw")
# Ini adalah field Many2one yang akan menampilkan nama partner
partner_name_display = fields.Many2one(
'res.partner', # Target modelnya
string="Partner Name",
compute='_compute_partner_name_display',
store=True # Optional: agar bisa di-search/filter langsung di DB
)
@api.depends('some_partner_id_integer')
def _compute_partner_name_display(self):
for rec in self:
if rec.some_partner_id_integer:
# Mencari objek res.partner berdasarkan ID
rec.partner_name_display = self.env['res.partner'].browse(rec.some_partner_id_integer)
else:
rec.partner_name_display = False
```
Lalu, di
XML View, panggil field
partner_name_display ini:
<field name="partner_name_display"/> Dengan cara ini, Kak Siska tidak perlu lagi 'mengkonversi' secara manual di view, karena Odoo akan melihat
partner_name_display sebagai field Many2one dan secara otomatis menampilkan namanya.
---
Intinya, untuk field
Many2one, selalu usahakan untuk memanggil
objek fieldnya langsung di XML View. Untuk
QWeb Report, gunakan atribut
.display_name atau
.name dari objek Many2one tersebut. Jika melibatkan computed field yang menghasilkan ID, lebih baik buat computed field tersebut sebagai Many2one juga.
Semoga pencerahan ini membantu Kak Siska membuat custom report dan view jadi lebih informatif dan user-friendly ya! Kalau ada kendala atau detail kasus yang lebih spesifik, jangan sungkan untuk bertanya lagi.
Selamat mencoba dan tetap semangat meng-Odoo!