2015-07-20 20 views
5

Tôi đã thử duy nhất trong sql_constaints trong OpenERP (Odoo) bằng hai phương pháp khác nhau bằng cách sử dụng dấu ngoặc vuông {} hoặc dấu ngoặc vuông []. Cả hai đều hoạt động tốt. Điều nào là đúng?Định dạng đúng để sử dụng duy nhất trong _sql_constraints trong OpenERP là gì?

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

(hoặc)

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

Tái bút: Nhưng nếu tôi muốn sử dụng nhiều hơn một hạn chế nó chỉ chấp nhận dấu ngoặc vuông [] như ví dụ này.

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

Lý do đằng sau nó là gì?

Trả lời

7

Chính xác là cú pháp dấu ngoặc vuông.

  1. bạn có thể grep trên _sql_constraints và xem nó là gì luôn được sử dụng,

  2. trong mã ORM trong openerp/models.py chúng ta có thể thấy rằng các giá trị mặc định là một danh sách rỗng:

_sql_constraints = [] 
    #... 
     cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', []) 
  1. trong Odoo 8.0 documentation người ta nói:

danh sách (name, sql_definition, message) bộ ba xác định các ràng buộc SQL để thực thi khi tạo bảng sao lưu.

Trong python2 bạn có thể nhận được list với cú pháp [].

Cú pháp {} hoặc tạo:

  • một dictionary nếu nó là trống {} hoặc nếu có phím giá trị như thế này: {'keyA': 'valueA', 'keyB': 'valueB'},
  • như của python 2.7 một set nếu khởi tạo như thế này: {'value1', 'valueB', 42}
+1

Nhưng nó tạo _sql_constraints khi tôi sử dụng {}. Ngay cả đối với nhiều ràng buộc. –

+1

@ ea- +1 để được giải thích tốt đẹp! –

+1

@TintuMon nó có thể hoạt động bằng may mắn hiện tại trong lõi odoo. Một danh sách và một tập hợp thường có thể được sử dụng thay thế cho nhau trong python. Sử dụng một tập hợp bạn sẽ không có lợi thế, và bạn có thể gặp lỗi với một thay đổi tương lai trong Odoo hoặc với một mô-đun bên ngoài có thể mong đợi danh sách hạn chế sql phải là _list_. –

5

Trong odoo cú pháp cho ràng buộc sql là danh sách (name, sql_definition, message). ví dụ:

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

bạn có thể cung cấp thêm một hạn chế sql trong danh sách bộ dữ liệu.

khi bạn xác định từ điển có khóa ngoài & giá trị python coi nó là được đặt. và thiết lập có thể dễ dàng.

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