Witamy!
Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.
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?
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)
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 ?
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>
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!
Bądź na bieżąco
O tym forum
Narzędzia do pytań
Statystyki
Spytał/a: 05.02.2016, 12:43 |
Oglądano: 3447 razy |
Ostatnia aktualizacja: 09.02.2016, 11:25 |
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ę :)