Aktualizacja wartości pola

Panowie,
W chwili wybrania produktu, odczytuję ilości z tabeli i chciałbym tę odczytaną ilość wpisać do pola 'current_stock' a         res.update({'current_stock': cstock[0][0]}) nie chce mi tego zrobić.

Oto metoda:

    def onchange_product_id(self, cr, uid, ids, prod_id=False, loc_id=False, loc_dest_id=False, partner_id=False, context=None):
        res = super(stock_move, self).onchange_product_id(cr, uid, ids, prod_id=prod_id, loc_id=loc_id, loc_dest_id=loc_dest_id, partner_id=partner_id)
        if prod_id == False:
            prod_id = 0
        location_list = []
        static_loc = 8
        locations = []
        cr.execute(""" select sum(qty) from stock_quant where product_id = %s and location_id != 7;""" %(prod_id))
        cstock = cr.fetchall()
        res.update({'current_stock': cstock[0][0]})
        quant_obj = self.pool.get('stock.quant')
        quant_ids = quant_obj.search(cr,uid, [('product_id','=',prod_id)])
        location_list.append(static_loc)
        for quant_data in quant_obj.browse(cr, uid, quant_ids, context=context):
            location_list.append(quant_data.location_id.id)
            quant_data.write({'locations':quant_data[0]})
        res.update({'domain':{'location_id':[('id','in',location_list)]}})
        return res

Lokalizacje wpisuje wzorowo a ilości nie ..

co zrobiłem źle ?

 

Dr.One
Dr.One
341
| 5 3 5
Data pytania 25.01.2016, 14:58
0
głos
477 Odsłony

Nie podajesz skąd się wzięło pole current_stock, do którego wstawiasz wartość i którego nie ma w standardzie!. Najlepiej użyj loggera aby zbadać jaka faktycznie wartość jest pobrana z bazy i podstawiana.

Janusz Stefaniak
na 26.01.2016, 18:29

Faktycznie, umknęło mi. Dodałem pole 'current_stock': fields.function(_get_current_stock, type='integer', string='Currently in stock'), do przechowywania ilości w czasie wyświetlania produktu i ewentualnie do umieszczenia w szablonie email. Wiem, że mogę użyć równie dobrze pola istniejącego np available_qty ale ponieważ się uczę ..... to takie dziwne rzeczy robię ;) A tu metoda do tego pola:

	def _get_current_stock(self, cr, uid, ids, field_name, arg, context=None):
		res			=	{}
		in_stock		=	0
		product_id	=	0

		for obj in self.browse(cr, uid, ids, context=context):
                       # zbieram ilość z tabeli stock_quant dla wybranego produktu ze wszystkich lokalizacji oprócz 'produkcja'
			cr.execute(""" select sum(qty) from stock_quant where product_id = %s and location_id != 7;""" %(obj.product_id.id))
			in_stock = cr.fetchall()
			if in_stock is None:
				in_stock = 0# sprawdzam czy nie jest typu Nonetype i jeśli jest zmieniam na '0', w przeciwnym wypadku wywala błąd 
			res = int(in_stock[0][0])# i tu pojawia się właściwa wartość
			print '== res ========================================================================='
                        print '   ', res # która wyświetlana jest tutaj :)
			return res # ale nie przekazuje do pola 'current_stock' które pozostaje 'puste'
Co zrobiłem źle ?
Dr.One
na 26.01.2016, 21:28

Dziękuję za zainteresowanie Panie Januszu.

Dr.One
na 26.01.2016, 21:29

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: 25.01.2016, 14:58
Oglądano: 477 razy
Ostatnia aktualizacja: 26.01.2016, 21:29