2012-06-04 32 views
7

quan điểm ban đầu gốc:OpenERP luôn hiển thị xem được thừa kế thay vì

<record id='view_1' model='ir.ui.view'> 
    <field name="name">view.name</field> 
    <field name="model">my.object</field> 
    <field name="priority" eval="17"/> 
    <field name="type">form</field> 
    <field name="arch" type="xml"> 
     ... 
    </field> 
</record> 

thừa hưởng cái nhìn từ bản gốc:

<record id='view_2' model='ir.ui.view'> 
    <field name="name">view.name</field> 
    <field name="model">my.object</field> 
    <field name="priority" eval="10"/> 
    <field name="inherit_id" ref="view_1"/> 
    <field name="type">form</field> 
    <field name="arch" type="xml"> 
     ... 
    </field> 
</record> 

Vì vậy, những gì xảy ra là OpenERP luôn hiển thị xem được thừa kế bỏ qua giá trị ưu tiên. Đây có phải là hành vi mong đợi, hoặc có cái gì khác mà tôi đang bỏ lỡ?

Nếu đây là hành vi mong đợi, sau đó hãy đọc thêm :-)

Tôi có my.second.object với many2one trường để my.object, và khi tôi muốn tạo my.object từ lĩnh vực này, tôi muốn mở một hình thức khác nhau chút nhìn của my.object. Tôi đang cố gắng tạo ra một cái nhìn khác nhau chỉ cho mục đích đó, nhưng khi bạn thấy nó không hoạt động quá dễ dàng (hay không?).

Mọi trợ giúp đều được đánh giá cao.

Trả lời

14

Có hành vi mong đợi. Mức độ ưu tiên của chế độ xem chỉ phục vụ để chọn chế độ xem chính để sử dụng khi không có chế độ xem cụ thể nào được yêu cầu. Chế độ xem được thừa kế là "lượt xem bản vá" hoạt động giống như con của chế độ xem mà chúng kế thừa và có thể không bao giờ được chọn làm "chế độ xem chính". Chúng luôn áp dụng trên đầu chế độ xem cha mẹ khi chế độ xem đó được hiển thị.

Nếu bạn muốn xem thay thế cho một mô hình nhất định, bạn nên xác định chế độ xem độc lập mới không kế thừa từ bất kỳ loại nào khác. Nếu xem đó là có nghĩa chỉ được sử dụng trong bối cảnh quan điểm của my.second.object, có hai thủ đoạn phổ biến để làm cho OpenERP sử dụng nó:

  • Xác định nó inline trong giao diện dạng my.second.object, như một đứa trẻ của <field> phần tử. Điều này có thể không hoạt động trong tất cả các máy khách OpenERP tùy thuộc vào phiên bản và hoạt động tốt nhất để khai báo các dạng xem biểu mẫu nội dòng cho các dòng o2m, thông thường.
  • Tuyên bố chế độ xem đó là chế độ xem độc lập với mức độ ưu tiên thấp (ví dụ: 32) và đặt khóa ngữ cảnh ma thuật trong trường many2one của chế độ xem my.second.object nên sử dụng chế độ xem đó. Khóa ma thuật ở dạng <view_type>_view_ref và giá trị phải là ID XML của chế độ xem mong muốn. Điều này sẽ làm việc ở khắp mọi nơi.
<!-- Example 1: inline form view --> 
<form string="My second object"> 
    <field name="my_object_id"> 
     <form string="My object inline view"> 
      <field name="name"/> 
     </form> 
    </field> 
</form> 

<!-- Example 2: explicitly ask for special view using magic key --> 
<form string="My second object"> 
    <field name="my_object_id" context="{'form_view_ref': 'module.my_object_form2'}"/> 
</form> 

Để tham khảo, có một cái nhìn tại this page của tài liệu OpenERP giải thích hầu hết các tùy chọn cho việc xây dựng và sử dụng xem bối cảnh cụ thể.

LƯU Ý: Nếu bạn đã sử dụng form_view_ref và từ quan điểm hình thức nếu bạn có bất kỳ nút được mở một cái nhìn hình thức của một số mô hình khác sau đó nó sẽ cho bạn lỗi. Nó sẽ cố gắng để mở cùng một hình thức xem bạn đã thông qua trong form_view_ref cho một mô hình cũng có.

+0

Mặc dù cả hai phương pháp đều không cung cấp cách __clean__ để giải quyết vấn đề của tôi, nhưng nó trả lời câu hỏi của tôi. Chúc mừng – and3p

+0

@ and3p: không chắc chắn những gì bạn mong đợi là "cách sạch sẽ" để giải quyết vấn đề của bạn? Bạn có nghĩ rằng bạn nghĩ OpenERP sẽ hoạt động khác hoặc cung cấp các tùy chọn khác? Bạn có muốn có loại thừa kế xem thứ hai cho phép sao chép "chế độ xem chính" không? Hệ thống hiện tại được thiết kế để cho phép các mô-đun mở rộng cho nhau một cách rõ ràng, bằng cách thực hiện sửa đổi điểm của các khung nhìn được xác định bởi "cha mẹ" của chúng, cho phép tất cả các loại kết hợp. – odony

+0

Vâng, ngay bây giờ tôi đã tạo ra một bản sao (ngoại trừ một vài sửa đổi) xem của tôi 'xem chính' chỉ được sử dụng với 'my.second.object', những gì giới thiệu dự phòng mã. Tôi đã hy vọng tôi sẽ không cần phải nghỉ mát để mã trùng lặp nếu tôi sử dụng xem thừa kế, nhưng như là 'Inherited views là" patch views "...' các tùy chọn khác là không thể. Sửa tôi nếu hiểu biết của tôi về kế thừa xem là sai. – and3p

1

"Vị trí" bạn đã xác định trong <field name="field_from_original_view"> là gì?

<record id='view_2' model='ir.ui.view'> 
    <field name="name">view.name</field> 
    <field name="model">my.object</field> 
    <field name="priority" eval="10"/> 
    <field name="inherit_id" ref="view_1"/> 
    <field name="type">form</field> 
    <field name="arch" type="xml"> 
     <field name="field_from_original_view" position="after" (or before)> 
      <field name="inherit1" /> 
      <field name="inherit2" /> 
      <field name="inherit3" /> 
     </field> 
    </field> 
</record> 
+0

Tôi đã sử dụng 'đã thay thế ', nhưng có liên quan đến câu hỏi của tôi không? Vấn đề là OpenERP sử dụng chế độ xem được kế thừa của tôi ngay cả ở nơi mà nó sẽ sử dụng chế độ xem ban đầu. – and3p

+0

Có thể khi bạn sử dụng "thay thế" OpenERP thay thế chế độ xem gốc bằng cách kế thừa? – voy

+0

Ồ, xin lỗi, tôi nghĩ tôi đã hiểu lầm câu hỏi của bạn ... – voy

0

Có thể không có khả năng tạo biểu mẫu kế thừa là biểu mẫu chuẩn của mô hình của bạn để mô hình đó sẽ được trình bày tự động.

NHƯNG Nếu bạn xem xét một tác vụ cụ thể -> hãy mở chế độ xem biểu mẫu được kế thừa cho trường one2many, ví dụ :; có. Đặt biến ngữ cảnh 'form_view_ref' thành 'MODULE.VIEW_ID'.

<field name="myOne2ManyField" context="{'form_view_ref': 'myModule.myInheritedView'}/> 

Vẫn hoạt động với Odoo 9.0.

Các vấn đề liên quan