Bỏ qua để đến Nội dung
Odoo Menu
  • Đăng nhập
  • Dùng thử miễn phí
  • Ứng dụng
    Tài chính
    • Kế toán
    • Hóa đơn
    • Chi phí
    • Bảng tính (BI)
    • Tài liệu
    • Ký tên
    Bán hàng
    • CRM
    • Bán hàng
    • POS Cửa hàng
    • POS Nhà hàng
    • Đăng ký
    • Cho thuê
    Trang web
    • Trình tạo trang web
    • Thương mại điện tử
    • Blog
    • Diễn đàn
    • Trò chuyện trực tiếp
    • Học trực tuyến
    Chuỗi cung ứng
    • Tồn kho
    • Sản xuất
    • PLM
    • Mua hàng
    • Bảo dưỡng
    • Chất lượng
    Nhân sự
    • Nhân viên
    • Tuyển dụng
    • Ngày nghỉ
    • Đánh giá
    • Giới thiệu
    • Đội xe
    Marketing
    • Marketing trên MXH
    • Marketing qua email
    • Marketing qua SMS
    • Sự kiện
    • Tự động hóa Marketing
    • Khảo sát
    Dịch vụ
    • Dự án
    • Bảng chấm công
    • Dịch vụ hiện trường
    • Hỗ trợ
    • Kế hoạch
    • Lịch hẹn
    Năng suất
    • Thảo luận
    • Phê duyệt
    • IoT
    • VoIP
    • Kiến thức
    • WhatsApp
    Ứng dụng của bên thứ ba Studio Odoo Nền tảng Đám mây Odoo
  • Ngành
    Bán lẻ
    • Nhà sách
    • Cửa hàng quần áo
    • Cửa hàng nội thất
    • Cửa hàng tạp hóa
    • Cửa hàng đồ kim khí
    • Cửa hàng đồ chơi
    Ẩm thực & Dịch vụ lưu trú
    • Bar và quán rượu
    • Nhà hàng
    • Đồ ăn nhanh
    • Guest house
    • Nhà phân phối đồ uống
    • Khách sạn
    Bất động sản
    • Công ty môi giới bất động sản
    • Công ty kiến trúc
    • Xây dựng
    • Quản lý bất động sản
    • Làm vườn
    • Hiệp hội chủ sở hữu bất động sản
    Tư vấn
    • Công ty kế toán
    • Đối tác Odoo
    • Công ty marketing
    • Công ty luật
    • Tuyển dụng
    • Thanh tra & chứng nhận
    Sản xuất
    • Dệt may
    • Kim loại
    • Nội thất
    • Ẩm thực
    • Nhà máy bia
    • Quà tặng doanh nghiệp
    Sức khoẻ & fitness
    • CLB thể thao
    • Cửa hàng kính mắt
    • Trung tâm fitness
    • Chuyên gia chăm sóc sức khỏe
    • Hiệu thuốc
    • Tiệm làm tóc
    Thương mại
    • Dịch vụ sửa chữa
    • Phần cứng CNTT & Hỗ trợ
    • Hệ thống năng lượng mặt trời
    • Công ty sản xuất giày
    • Dịch vụ vệ sinh
    • Dịch vụ HVAC
    Khác
    • Tổ chức phi lợi nhuận
    • Cơ quan môi trường
    • Cho thuê biển quảng cáo
    • Nhiếp ảnh
    • Cho thuê xe đạp
    • Đại lý phần mềm
    Xem tất cả ngành
  • Cộng đồng
    Học tập
    • Khóa học
    • Tài liệu
    • Chứng chỉ
    • Đào tạo
    • Blog
    • Podcast
    Thúc đẩy đào tạo
    • Chương trình đào tạo
    • Trò chơi kinh doanh Scale Up!
    • Tham quan Odoo
    Nhận phần mềm
    • Tải xuống
    • So sánh các phiên bản
    • Phiên bản
    Hợp tác
    • Github
    • Diễn đàn
    • Sự kiện
    • Dịch thuật
    • Trở thành đối tác
    • Dịch vụ dành cho Đối tác
    • Đăng ký công ty kế toán của bạn
    Nhận dịch vụ
    • Tìm đối tác
    • Tìm kế toán
    • Gặp chuyên gia hỗ trợ
    • Dịch vụ Triển khai
    • Khách hàng tham khảo
    • Hỗ trợ
    • Nâng cấp
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Nhận một buổi demo
  • Bảng giá
  • Trợ giúp

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Kế toán
  • Tồn kho
  • PoS
  • Dự án
  • MRP
All apps
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Bạn cần phải đăng ký để tương tác với cộng đồng.
Tất cả bài viết Người Huy hiệu
Thẻ (Xem tất cả)
odoo accounting v14 pos v15
Về diễn đàn này
Hỗ trợ

Dynamic placeholder: different placeholders for same view shown in different menus

Đăng ký nhận tin

Nhận thông báo khi có hoạt động trên bài viết này

Câu hỏi này đã bị gắn cờ
viewinheritancedynamicplaceholder
2 Trả lời
13046 Lượt xem
Ảnh đại diện
Anton Chepurov

How can I inherit a view such that it shows different placeholders when shown from different menus?

It seems that inheritance is not a mechanism that would allow this, am I right?

If so, are there any other ways of achieving the same view but with different placeholders?

Copy-pasting the view wouldn't work as the inherited views won't be considered/pulled in.


A widget, probably?

Ah, I think fields_view_get() should fix the issue :) Will try it out.


0
Ảnh đại diện
Huỷ bỏ
Ảnh đại diện
Temur
Câu trả lời hay nhất

You can have different views per menu (you can define explicitly which view should be used on which menu using xml id). Say, for two menu, try to create two views, with different name and xml id,  adapt placehoders in both views, then bind the two views to the corresponding menus. You can also leverage "sequence" field of view in some way.


UPDATE:

(example code is for Odoo 8.0, requires Sales module to be installed )

the following example adds two pages, using different inherited views per menu, as suggested above.

first page: "/Sales/Products/Products AAA"

        <record model="ir.ui.view" id="product_product_aaa_page_view">
<field name="name">aaa.text.product.form.view</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view" />
<field name="mode">primary</field>
<field name="arch" type="xml">
<field name="description" position="attributes">
<attribute name="placeholder">You are on "/Sales/Products/Products AAA" page!</attribute>
</field>
</field>
</record>


<record id="product_action_aaa" model="ir.actions.act_window">
<field name="name">Product AAA</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_type">form</field>
<field name="view_id" ref="product_product_aaa_page_view"/>
</record>

<menuitem action="product_action_aaa"
id="menu_product_template_aaaa"
parent="base.menu_product" sequence="2" />

and here is second page: "/Sales/Products/Products BBB"

        <record model="ir.ui.view" id="product_product_bbb_page_view">
<field name="name">bbb.text.product.form.view</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view" />
<field name="mode">primary</field>
<field name="arch" type="xml">
<field name="description" position="attributes">
<attribute name="placeholder">You are on "/Sales/Products/Products BBB" page!</attribute>
</field>
</field>
</record>

<record id="product_action_bbb" model="ir.actions.act_window">
<field name="name">Product BBB</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">product.template</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_type">form</field>
<field name="view_id" ref="product_product_bbb_page_view"/>
</record>

<menuitem action="product_action_bbb"
id="menu_product_template_bbbb"
parent="base.menu_product" sequence="3" />

1
Ảnh đại diện
Huỷ bỏ
Anton Chepurov
Tác giả

I'm sorry, but you didn't bother reading the question, did you? Nah, this happens more often than not on this forum... :/

Temur

You're welcome. There is always several ways to achieve the same thing, so it's normal to get alternatives either on this forum or elsewhere...

Anton Chepurov
Tác giả

@Temur, it was too rude of me, I'm sorry. I didn't mean that. I'm really sorry. What I meant was that your answer doesn't solve the described problem - and I've explained why in the question itself: > Copy-pasting the view wouldn't work as the inherited views won't be considered/pulled in. I lost my cool because for almost every question I post here I get an answer which I have beforehand deliberately explained in the question that it doesn't work for the given problem. So was yours, too. So that's not an alternative, as you say. It doesn't achieve what the problem formulates. I'm sorry once again.

Temur

Apology accepted. BUT, [1] you have combined multiple (4 or 5) questions in the one, probably my answer is not covers all of them, but I think it answers some of them. [2] I have not to be agree whatever you're explaining in your question, but it does not mean I have not read it! Yes, I read that you explained as if "inherited views won't be considered/pulled in", but I disagree with this assumption and I stated clearly in my answer that you CAN have different views per menu, if you use xml id to bind views to menus. I mentioned also sequence (i.e. priority of view). if you bind view to menu with it's xml id as I suggested, then this view is used, regardless of sequence, otherwise (as in most cases) as we do not bind view to menu, then view is chosen according it's sequence(priority). I do not argue about how good the alternative is, and is it best fit for your case or not. but you can gather some knowledge from it and maybe it'll be best fit in other cases. So, what my message was all about is that answer to your question #2 in the post is NO, and further explanation about how to do #1. and it's clearly an alternative and I thought it should be interesting for you, as YOU ASKED ABOUT IT. I'll add an example code to my answer, you can check it and see yourself answer to your #1 question. BUT, my answer was explaining in words the case, that you can see in the example code, you should not require the example for understanding that.

Temur

Example is added. Now you can try it, and see with your eyes different placeholder shown from different menus, using inherited view. BTW, congrats with your own solution and +1. As your problem is solved, it's not necessary to continue further discussion on this thread I think. But you have not to be agree with me, as you like..

Anton Chepurov
Tác giả

Temur, thank you for your time providing me with an example! It is absolutely identical to the first idea that came to my mind -- and I tried it -- and it doesn't work. To be absolutely sure, I've looked up the history of the file in the Local History of IntelliJ, and yes, it's absolutely identical. I've copy-pasted it to my answer (see above). Could you explain where is the difference between your solution and mine and why it doesn't work in my particular case? (always the last overridden view is chosen and shown in both menus regardless of the different view_id-s specified).

Temur

<field name="mode">primary</field>
'primary' mode - means more independent view, then default 'extension' mode. Quote from help msg:
* if extension (default), if this view is requested the closest primary view is looked up (via inherit_id), then all views inheriting from it with this view's model are applied
* if primary, the closest primary view is fully resolved (even if it uses a different model than this one), then this view's inheritance specs () are applied, and the result is used as if it were this view's actual arch.

Ảnh đại diện
Anton Chepurov
Tác giả Câu trả lời hay nhất

Yep, fields_view_get() + context key set in the menu solved that.

Here's the solution.

Context:                        (note the bold part)

        <record id="action_picking_int_form" model="ir.actions.act_window">
<field name="name">Move Items</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_picking_form"/>
<field name="target">current</field>
<field name="context">{'picking_type': 'int'}</field>
</record>

And view_get():

    def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
res = super(stock_picking, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
if view_type == 'form':
doc = etree.XML(res['arch'])
note = doc.xpath("//field[@name='note']")

picking_type = context.get('picking_type')
if picking_type == 'in':
note[0].attrib['placeholder'] = 'Model | Serial Number | Model | Serial Number | ...'
elif picking_type == 'int':
note[0].attrib['placeholder'] = 'Location Barcode | Quant ID | Quant ID | Quant ID | ...'

res['arch'] = etree.tostring(doc)
return res


UPDATE:

Why does this solution show the same placeholder for both menus - for Receive New Products and for Move Products?

Both menus show Location | Barcode as a placeholder (taken from the last view definition). If smb asks, <data> tag doesn't have a noupdate flag.

<record id="view_picking_form" model="ir.ui.view">
<field name="name">stock.picking.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<field name="note" position="replace">
<group col="4">
<field name="note" class="oe_inline" colspan="2" nolabel="1" placeholder="Add an internal note..."/>
<field name="info" style="color: blue;" colspan="2" nolabel="1"/>
</group>
</field>
</field>
</record>
<record id="view_picking_in_form" model="ir.ui.view">
<field name="name">stock.picking.in.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="view_picking_form"/>
<field name="arch" type="xml">
<field name="note" position="attributes">
<attribute name="placeholder">Model | Serial_Number</attribute>
</field>
</field>
</record>
<record id="view_picking_int_form" model="ir.ui.view">
<field name="name">stock.picking.int.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="view_picking_form"/>
<field name="arch" type="xml">
<field name="note" position="attributes">
<attribute name="placeholder">Location | Barcode</attribute>
</field>
</field>
</record>

<record id="action_picking_form" model="ir.actions.act_window">
<field name="name">Receive New Products</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_picking_in_form"/>
<field name="target">current</field>
<field name="context">{'picking_type': 'in'}</field>
</record>
<menuitem action="action_picking_form" id="menu_action_picking_form" parent="stock.menu_stock_warehouse_mgmt" sequence="3"/>
<record id="action_picking_int_form" model="ir.actions.act_window">
<field name="name">Move Products</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_picking_int_form"/>
<field name="target">current</field>
<field name="context">{'picking_type': 'int'}</field>
</record>
<menuitem action="action_picking_int_form" id="menu_action_picking_int_form" parent="stock.menu_stock_warehouse_mgmt" sequence="10"/>

Receive New Items: https://www.dropbox.com/s/uco8b99arlz2qf8/Receive_New_Items.png?dl=0

Move Items: https://www.dropbox.com/s/x706dftvmfieh0n/Move_Items.png?dl=0


If I set priorities for both views (and strictly for both views, just for one is not enough!) like this:

        <record id="view_picking_in_form" model="ir.ui.view">
<field name="name">stock.picking.in.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="view_picking_form"/>
<field name="priority" eval="21"/>
<field name="arch" type="xml">
<field name="note" position="attributes">
<attribute name="placeholder">Model | Serial_Number</attribute>
</field>
</field>
</record>
<record id="view_picking_int_form" model="ir.ui.view">
<field name="name">stock.picking.int.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="view_picking_form"/>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<field name="note" position="attributes">
<attribute name="placeholder">Location | Barcode</attribute>
</field>
</field>
</record>

... then Model | Serial_Number placeholder is shown in both menus.

Hence, it is either a bug in Odoo's view inheritance mechanism, or inheritance simply doesn't allow such tuning of placeholders and hence the only solution known to me so far is overriding the fields_view_get().

1
Ảnh đại diện
Huỷ bỏ
Bạn có hứng thú với cuộc thảo luận không? Đừng chỉ đọc, hãy tham gia nhé!

Tạo tài khoản ngay hôm nay để tận hưởng các tính năng độc đáo và tham gia cộng đồng tuyệt vời của chúng tôi!

Đăng ký
Bài viết liên quan Trả lời Lượt xem Hoạt động
View inheritance Đã xử lý
view inheritance
Ảnh đại diện
Ảnh đại diện
1
thg 3 20
4419
How do I remove fields from a view in a custom module? Đã xử lý
view inheritance
Ảnh đại diện
Ảnh đại diện
Ảnh đại diện
Ảnh đại diện
12
thg 12 18
36269
Weird error "Expression cannot be located in parent view" in view inheritance Đã xử lý
view inheritance
Ảnh đại diện
Ảnh đại diện
1
thg 7 16
7971
Two-level view inheritance, what am I missing?
view inheritance
Ảnh đại diện
Ảnh đại diện
2
thg 3 15
6909
view inheritance in openerp
view inheritance
Ảnh đại diện
Ảnh đại diện
1
thg 3 15
4382
Cộng đồng
  • Khóa học
  • Tài liệu
  • Diễn đàn
Open source
  • Tải xuống
  • Github
  • Runbot
  • Dịch thuật
Dịch vụ
  • Lưu trữ Odoo.sh
  • Hỗ trợ
  • Nâng cấp
  • Phát triển tùy chỉnh
  • Đào tạo
  • Tìm kế toán
  • Tìm đối tác
  • Trở thành đối tác
Giới thiệu công ty
  • Công ty của chúng tôi
  • Tài sản thương hiệu
  • Liên hệ
  • Việc làm
  • Sự kiện
  • Podcast
  • Blog
  • Khách hàng
  • Pháp lý • Riêng tư
  • Bảo mật
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo là bộ ứng dụng kinh doanh có open source đáp ứng tất cả các nhu cầu của công ty bạn: CRM, thương mại điện tử, kế toán, tồn kho, POS, quản lý dự án, v.v.

Định hướng giá trị riêng biệt của Odoo là tích hợp hoàn toàn và dễ dàng sử dụng.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now