我們正在嘗試在我們的Odoo 9安裝中實現自定義預留類型的解決方案。該解決方案包括Reservation
模型和Session
模型。 Reservation
的功能之一是作爲Sessions
的關聯容器進行操作。 Session
型號的Many2one
字段將其鏈接到Reservation
型號。Odoo 9表單視圖自定義保存方法
在這一點上,我們有定義的模型和一個標準的形式視圖,允許我們創建一個新的預留。但是,我們希望視圖包含一個允許我們選擇伴隨會話數量的下拉小部件,我們希望預留保存功能可以創建適當數量的會話。
有兩個部分我們掙扎在執行本:
我們怎麼能包括實際上不依賴於模型領域的小部件(用數字1-8下拉菜單)?只要下一點提到的命令被執行,該值就會被釋放。
是否有辦法來覆蓋標準的保存功能來執行自定義代碼(創建對應於自定義窗口小部件的價值會話的數量和標準值預先填充它們),還是我們必須創建一個完全自定義操作並隱藏窗體視圖上的默認保存按鈕?我們已經知道了這一點,就像你在代碼中看到的一樣。
我們不需要任何人來爲我們編寫了這一點,但因爲我們是新來的適當的方法大方向指點我們的平臺將是巨大的。
編輯:
下面是相關的代碼,我們有這麼遠:
models.py
class ResNumber(models.Model):
_name = 'restest.res_num'
name = fields.Char(string="Number to book", required=True)
num = fields.Integer(string="Number", required=True)
class Reservation(models.Model):
_name = 'restest.reservations'
name = fields.Char(string="Title", required=True)
num_booked = fields.Many2one('restest.res_num', ondelete='set null', string="Number to book")
slot_id = fields.Many2one('restest.slots', ondelete='set null', string="Slot ID")
session_ids = fields.One2many('restest.sessions', 'reservation_id', string="Session IDs")
customer = fields.Many2one('res.partner', ondelete='set null', string="Customer")
@api.model
def create(self, vals):
res_id = super(Reservation, self).create(vals)
numValue = res_id.num_booked.num
resIdValue = res_id.id
start = 1
while start <= numValue:
self.env['restest.sessions'].create({'name': start, 'reservation_id': resIdValue})
start = start + 1
return res_id
class Session(models.Model):
_name = 'restest.sessions'
name = fields.Char(string="Title", required=True)
reservation_id = fields.Many2one('restest.reservations', ondelete='set null', string ="Reservation ID")
views.xml
<record model="ir.ui.view" id="reservation_create_view">
<field name="name">reservation.form</field>
<field name="model">restest.reservations</field>
<field name="arch" type="xml">
<form string="Make a Reservation">
<sheet>
<group>
<field name="name"/>
<field name="slot_id"/>
<field name="num_booked"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="make_res_action">
<field name="name">Make a Reservation</field>
<field name="res_model">restest.reservations</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="reservation_create_view"/>
</record>
defaultData.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<record id="first_cat" model="restest.res_num">
<field name="name">1</field>
<field name="num">1</field>
</record>
<record id="second_cat" model="restest.res_num">
<field name="name">2</field>
<field name="num">2</field>
</record>
<record id="third_cat" model="restest.res_num">
<field name="name">3</field>
<field name="num">3</field>
</record>
<record id="fourth_cat" model="restest.res_num">
<field name="name">4</field>
<field name="num">4</field>
</record>
</openerp>
所以這裏的測試實現是非常簡單的。我們創建了ResNumber
模型,並預填了1-4個條目。 Reservation
模型中的Many2one
字段是用戶可以選擇要保留多少個會話的當前方式。我們覆蓋默認的create命令,根據ResNumber
字段的值創建會話數量。
但是,我們想要的是完全刪除ResNumber
模型。將該數字存儲在表中是不好的數據庫慣例,因爲它可以通過替代查詢來派生。我們想要做的是在Reservation
型號的表格視圖中包含一個字段,並選擇編號,然後在創建Session
實例後立即丟棄該值。有沒有辦法做到這一點?
你應該顯示你的代碼和當前的嘗試,所以我們可以幫你 – danidee
偉大的觀點@dani DEE。現在已經添加了,我應該在昨天晚上添加我們已經解決了第二個問題。 – matthewlehew
您是否正在嘗試更改many2one字段的下拉框中的記錄數? –
Cherif