2012-11-07 16 views
13

मैं निम्नलिखित कॉलम के साथ OpenERP/PostgreSQL में एक टेबल है: name और descriptionOpenERP अद्वितीय बाधा

_sql_constraints = [('unique_name', 'unique(name)', 'A record with the same name already exists.')] 

यह ठीक काम करता है, लेकिन यह केस संवेदी है:

मैं अद्वितीय नाम निम्नलिखित सत्यापन गयी। वर्तमान में, यह इस तरह के "मिकी", "मिकी" और "मिकी" के रूप में मान स्वीकार करता है:

Wrong Way: 
-------------------------- 
| name | description | 
-------------------------- 
| mickey | not a mouse | 
-------------------------- 
| MICKEY | not a mouse | 
-------------------------- 
| Mickey | not a mouse | 
-------------------------- 

वहाँ इतना है कि यह उपयोगकर्ताओं को ऐसी "मिकी के रूप में कई मान जोड़ने के लिए अनुमति नहीं दी जाएगी सत्यापन कोड को संशोधित करने का कोई तरीका है "," मिकी "और" मिकी "? मैं अद्वितीय कुंजी सत्यापन केस असंवेदनशील कैसे बना सकता हूं?

Right Way: 
-------------------------------- 
| name   | description | 
-------------------------------- 
| mickey  | not a mouse | 
-------------------------------- 
| mickey mouse | is a mouse | 
-------------------------------- 
| donald  | is a duck  | 
-------------------------------- 

उत्तर

14
case insensitive constraints जांच HERE किसी और आप हमेशा एसक्यूएल के बजाय प्रतिबन्ध OpenERP उपयोग कर सकते हैं

OpenERP प्रतिबन्ध के लिए

जांच उदाहरण

def _check_unique_insesitive(self, cr, uid, ids, context=None): 
    sr_ids = self.search(cr, 1 ,[], context=context) 
    lst = [ 
      x.FIELD.lower() for x in self.browse(cr, uid, sr_ids, context=context) 
      if x.FIELD and x.id not in ids 
      ] 
    for self_obj in self.browse(cr, uid, ids, context=context): 
     if self_obj.FILD and self_obj.FILD.lower() in lst: 
      return False 
    return True 

_constraints = [(_check_unique_insesitive, 'Error: UNIQUE MSG', ['FIELD'])] 
+0

हाय रुचिर! त्वरित प्रतिक्रिया के लिए धन्यवाद। तुम मुझे एक उदाहरण है कि कैसे मैं प्रतिबन्ध OpenERP का उपयोग कर वांछित सत्यापन लागू कर सकते हैं दे सकते हैं? – codemickeycode

+0

सूची में से एक सूची में विशिष्ट क्षेत्र के लिए सभी डेटा। या तो कम या ऊपरी मामले में यह कन्वर्ट, तो ऑपरेटर के साथ नया मान के लिए जाँच, और परिणाम के विपरीत वापस जाएँ। –

+0

यह काम किया। धन्यवाद रुचिर! मैं सिर्फ सूची अंतिम प्रविष्टि – codemickeycode

-1

एक सरल तरीका था Odoo 8.0 में या इसके बाद के constrains का उपयोग कर। मॉडल के सभी रिकॉर्ड हो जाते हैं और कम() और आत्म रिकॉर्ड को छोड़कर के साथ वांछित क्षेत्र मूल्य की जाँच करें।

@api.constrains('code') 
def _check_duplicate_code(self): 
    codes = self.search([]) 
     for c in codes: 
      if self.code.lower() == c.code.lower() and self.id != c.id: 
       raise exceptions.ValidationError("Error: code must be unique") 
+0

उत्तर के लिए धन्यवाद इसमें कोड शामिल है कि कोड केवल कोड का ब्लॉक नहीं है। विशेष रूप से अन्य उत्तरों के साथ एक वर्ष से अधिक पुराने प्रश्नों के उत्तर में, कारणों में शामिल होना चाहिए कि यह उत्तर भाषा में किसी भी बदलाव या अन्य पोस्ट किए गए उत्तरों के बीच मतभेदों के कारण क्यों प्रासंगिक है। –

संबंधित मुद्दे