2015-07-20 27 views
5

我在OpenERP(Odoo)的sql_constaints中使用了兩種使用花括號{}或方括號[]的不同方法嘗試過獨特的方法。 這兩個工作正常。 哪一個是正確的?在OpenERP的_sql_constraints中使用唯一的正確格式是什麼?

_sql_constraints = { 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.') 
    } 

(或)

_sql_constraints = [ 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.') 
    ] 

P.S:但是,如果欲使用比約束更它僅接受方括號[]這樣的例子。

_sql_constraints = [ 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.'), 
    ('contact_uniq', 'unique(contact)', ' Please enter Unique Mobile no.') 
    ] 

背後的原因是什麼?

回答

7

正確的是方括號語法。

  1. 你可以grep在_sql_constraints,看看它是什麼,總是使用,

  2. openerp/models.py的ORM代碼,我們可以看到,默認值是一個空列表

    _sql_constraints = [] 
        #... 
         cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', []) 
    
    1. in Odoo 8.0 documentation它說:

    (name, sql_definition, message)列表定義了在生成支持表時要執行的SQL約束。

    在python2中,您可以得到一個list,其語法爲[]

    語法{}或者創建:

    • 一個dictionary如果爲空{}或者如果有鍵的值是這樣的:{'keyA': 'valueA', 'keyB': 'valueB'}
    • 作爲蟒2.7 set如果實例是這樣的:{'value1', 'valueB', 42}
+1

但是,當我使用{}時它會創建_sql_constraints。即使是多重約束。 –

+1

@ ea- +1對於尼斯的解釋! –

+1

@TintuMon它可能在覈心odoo中運氣好運。一個列表和一個集合通常可以在python中互換使用。使用一套你不會得到好處,並且你可能會在Odoo中有一個未來的變化或者一個外部模塊出現錯誤,這個模塊可能預期sql約束列表是一個_list_。 –

5

在odoo中,sql約束的語法是列表(name, sql_definition, message)。例如

_sql_constraints = [ 
    ('name_uniq', 'unique(name)', 'Custom Warning Message'), 
    ('contact_uniq', 'unique(contact)', 'Custom Warning Message') 
] 

您可以在元組列表中給出更多的一個sql約束。

當你定義一個帶有輸出鍵的字典& value python把它當作set。並設置可以是可耕。

相關問題