2017-01-20 8 views
0

私には2つの質問があります。 最初のもの。簡易Odoo/Python/XML

このフィールドは50以上の整数でなければなりません。どうすればいいですか?

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

第2質問。

「名前」で検索を追加したいのですが、これを実行すると、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

制約 "デコレータが何をしたい、おそらくですが行うことができるいくつかの方法があります。そうでない場合は、例外を発生させるために 'write'メソッドと 'create'メソッドをオーバーライドできます。

制約関数は、レコードの書き込みまたは作成の前に実行されます。そして、値が検証をパスしない限り、レコードを書き込むことを許可しません。

​​

検索ビューに関しては、ツリービューもあります。検索ビューとツリービューは別々のものです。それらを別々に定義する必要があります。あなたは(推奨 CZoellner として)だけでなく「のonchange」機能を使用してフィールドデータの即時検証を提供したい場合

<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> 

あなたは、これはすぐにユーザーに通知することができます入力された値は、しかし、無効であるべきでありませんユーザーがエラーメッセージを単に無視できるので、レコードの検証に使用することができます。ここに例があります。

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

あなたの答えに完全に同意します。あなたは、 "record.value <50"を 'record.value> = 50'に変更することでOPを" 50以上に等しい "と言い換えることでそれを増やしたいかもしれません。 –