2017-01-20 22 views
0

我有2個問題。 第一個。簡單的Odoo/Python/XML

該字段必須是大於或等於50的整數。我該怎麼做。

value = fields.Integer("Value", required=True) 

第二個問題。

我想添加搜索的「名稱」,但如果我運行此coed我得到TypeError:類型不是構造函數。我的搜索部分有什麼問題?沒有搜索部分,它運行正常。

<record model="ir.ui.view" id="helloworld.list2"> 
     <field name="name">helloworld listx</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <search> 
      <field name="name"/> 
     </search> 
     <tree> 
      <field name="name"/> 
      <field name="reference"/> 
     </tree> 
     </field> 
    </record> 

UPDATE。

from openerp import models, fields, api 
from openerp.exceptions import ValidationError 


class HelloWorld(models.Model): 
    _name = 'helloworld.test' 
    name = fields.Char("Name", required=True, size=20) 
    value = fields.Integer("Value", required=True) 

    # I am adjusting the indentation below so the methods become part of your class 

    @api.onchange('value') 
    def _onchange_value(self): 
     for record in self: 
      if record.value < 20: 
       raise ValidationError("Your record is too small: %s" % record.value) 
+0

如果您覺得這個答案有幫助,我將不勝感激,如果你將其標記爲正確的。謝謝! –

回答

2

有幾個方面,它可以做但在「約束」裝飾可能是你想要的東西。如果不是,你可以重寫'寫'和'創建'方法來引發異常。

約束函數將在寫入或創建記錄之前運行。除非值通過驗證,否則不允許寫入記錄。

​​

關於您的搜索視圖。你也有一個樹形視圖。搜索視圖和樹視圖是完全不同的事物。你應該分別定義它們。

<record model="ir.ui.view" id="helloworld.tree2"> 
     <field name="name">test2.tree</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <tree> 
      <field name="name"/> 
      <field name="reference"/> 
     </tree> 
     </field> 
</record> 

<record model="ir.ui.view" id="helloworld.search2"> 
     <field name="name">test2.search</field> 
     <field name="model">helloworld.test2</field> 
     <field name="arch" type="xml"> 
     <search> 
      <field name="name"/> 
     </search> 
     </field> 
</record> 

你可以,如果你想提供一種使用「平變化」功能,以及現場數據的即時驗證(如CZoellner推薦),這將立即通知用戶輸入值是無效但是不應該用於記錄驗證,因爲用戶可以簡單地繞過錯誤消息。這是一個例子。

from odoo.exceptions import ValidationError 

@api.onchange('value') 
def _onchange_value(self): 
    for record in self: 
     if record.value < 50: 
      raise ValidationError("Your record is too small: %s" % record.value) 
+0

有沒有更簡單的方法?例如,如果我們希望我們的字段長度最大爲20,我們可以像fields.interger(size = 20)那樣做,也許有類似的東西? – Grf

+0

不是我所知道的。 –

+0

完全同意你的答案Phillip。由於OP提到「大於或等於50」,所以您可能需要通過將record.value <50'改爲'record.value> = 50'來擴充它 –