2012-11-07 12 views
13

Mam tabelę w OpenERP/PostgreSQL z następującymi kolumnami: name i description.Niepowtarzalny ogranicznik OpenERP

dodałem następujące walidacji dla unikalnej nazwy:

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

To działa dobrze, ale to jest wielkość liter. Obecnie przyjmuje wartości takie jak „Mickey”, „MICKEY” i „Mickey”:

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

Czy istnieje sposób, aby zmienić kod weryfikacyjny, tak że nie pozwoli użytkownikom dodać kilka wartości, takie jak „Mickey "," MICKEY "i" mickey "? Jak mogę uczynić unikalny przypadek sprawdzania poprawności klucza?

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

Odpowiedz

14

Dla case insensitive constraints wymeldowania HERE indziej można zawsze wykorzystać OpenERP Ograniczenia zamiast SQL.

dla ograniczeń OpenERP

sprawdzenie przykład

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

Cześć Ruchir! Dzięki za szybką odpowiedź. Czy możesz podać przykład, w jaki sposób mogę wdrożyć pożądaną weryfikację za pomocą ograniczeń OpenERP? – codemickeycode

+0

Lista wszystkich danych dla określonego pola na jednej liście. Przekształć w Dolną lub Górną Sprawę, następnie sprawdź dla Nowej Wartości za pomocą operatora i odwróć wynik odwrotny do wyniku. –

+0

Zadziałało. Dzięki Ruchir! Właśnie zmodyfikowałem listę, aby wykluczyć ostatni wpis – codemickeycode

-1

stosując ograniczenia co do Odoo 8,0 lub powyżej, w prostszy sposób. pobierz wszystkie rekordy modelu i sprawdź żądaną wartość pola za pomocą przycisku lower() i wykluczenia rekordu własnego.

@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

Odpowiedzi powinny zawierają opis kodu, który nie jest blokiem kodu. Odpowiedzi z pytań, które mają więcej niż rok, w szczególności z innymi odpowiedziami, powinny zawierać powody, dla których ta odpowiedź jest istotna ze względu na zmiany w języku lub różnice między innymi zamieszczonymi odpowiedziami. –

Powiązane problemy