Sprawdzanie i aktualizacja kodu pocztowego

Panowie,

Dodałem do modułu klasę kody pocztowe i w związku z tym dopisałem metodę która ma sprawdzić i zależnie od tego czy kod już istnieje czy jeszcze nie dopisać brakujące elementy jak nazwa ulicy czy miasto a jeśli nie istnieje dopisać nowy rekord.

Oto przykład:

<pre>

    def check_code(self):
        print '== Sprawdzam kod pocztowy ==============================================================='
        print '......'
        code_check = self.env['post.coder'].search([('postcode','=',self.buyer_postcode)])
        if code_check == False:# wygląda jednak że mój "if" nie za bardzo działa .....
            print 'Brak kodu w bazie, dopisuję ....'
            self.env['post.coder'].write(code_check, {'number': self.buyer_address_1,'street': self.buyer_address_2,'postcode': self.buyer_postcode})
            print 'Kod pocztowy dodany'
        else:
            self.env.cr.execute(""" UPDATE post_coder SET street = '%s' WHERE postcode = '%s'""" %(self.buyer_address_1,self.buyer_postcode))
            print '   Dane zaktualizowane:',code_check.postcode, self.buyer_postcode, self.buyers_address_1 .....
            print '===================================================================================='

</pre>

Co zrobiłem źle, że warunki nie działają, tak przynajmniej wygląda bo aktualizować owszem aktualizuje ale nie chce dopisać nowego i jak w tym wypadku powinny wyglądać poprawnie zdefiniowane query w wersji NEW API?

Dr.One
Dr.One
341
| 5 3 5
Data pytania 05.02.2016, 12:43
0
głos
583 Odsłony

1) Przeczytaj o składni polecenia if oraz o formułowaniu niepoprawnych warunków typu if code_check == False  np. tutaj i tutaj

2) Zerknij do dokumentacji Odoo new API - zauważysz wtedy róznicę między write i create

3) W dokumentacji Odoo znajdziesz także fagment dotyczący składni Low-level SQL (której nie wiadomo po co chesz tu używać, jeśli dokładnie to samo można osiągnąć za pomocą kodu wyższego poziomu)

Dariusz Żbikowski
Dariusz Żbikowski
1263
| 4 3 3
Data odpowiedzi 05.02.2016, 13:19
1
głos

Pomogło :) Oczywiście masz rację, lepiej używać API niż pakować bezpośrednie odwołania/query i do tego zmierzam :). Ponieważ jednak jeszcze nie potrafię tak jak bym sobie tego życzył ..... kombinuję. Lektura obowiązkowa na dzisiejszy i następne wieczory jest więc ... dziekuję :)

Dr.One
na 05.02.2016, 15:57

Są ludzie którzy twierdzą, że query w postaci kodu działa często szybciej niż API i nie powoduje tyle problemów. Ile w tym prawdy ?

Dr.One
na 08.02.2016, 14:21

Problem rozwiązany (niedokończony):

<pre>

    def check_code(self):
        code_check = self.env['post.coder'].search([('postcode','=',self.buyer_postcode)])
        if not code_check:
            print '   Brak kodu w bazie, dopisuję ............'
            self.env['post.coder'].create({'number': self.buyer_address_1,'street': self.buyer_address_1,'postcode': self.buyer_postcode})
            print '   Kod pocztowy dodany!'
        else:# jeśli kod istnieje ale dodatkowe dane nie są dostępne jak np ulica i numer domu - aktualizujemy (tak będzie :) narazie aktualizujemy wszystko jak leci :))
            self.env.cr.execute(""" UPDATE post_coder SET street = '%s' WHERE postcode = '%s' """ %(self.buyer_address_1,self.buyer_postcode))
            print '   Kod pocztowy został zaktualizowany:',code_check.postcode
</pre>

 

Dr.One
Dr.One
341
| 5 3 5
Data odpowiedzi 09.02.2016, 11:22
0
głos

Twoja odpowiedź

Spróbuj dać znacząca odpowiedź. Jeśli chcesz wypowiedzieć się na temat pytania lub odpowiedzi, po prostu użyj narzędzia komentowania. Proszę pamiętać, że zawsze można zrewidować swoją odpowiedź - nie ma potrzeby odpowiadać na to samo pytanie dwa razy. Także prosimy, nie zapomnij zagłosować - to naprawdę pomaga wybrać najlepsze pytania i odpowiedzi!

Zadaj Pytanie

Bądź na bieżąco

O tym forum

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.

Przeczytaj wytyczne

Narzędzia do pytań

4 obserwujący

Statystyki

Spytał/a: 05.02.2016, 12:43
Oglądano: 583 razy
Ostatnia aktualizacja: 09.02.2016, 11:25