Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
2 Trả lời
2892 Lượt xem

If I do:

if shipment_obj.move_lines:
    for line in shipment_obj.move_lines: 
        #line.name, line.id etc..

this works no problem, but I shouldn't need the if statement.

If I just do:

    for line in shipment_obj.move_lines: 
       #line.name, line.id etc..

this throws: "TypeError: 'NoneType' object is not iterable"

Just want to know, why this could be?

here for reference:

shipment_obj = self.pool.get('stock.picking.in').browse(cr, uid, context.get('active_id')) #gives correct shipment obj

trying to access:

 'move_lines': fields.one2many('stock.move', 'picking_id', 'Internal Moves', states={'done': [('readonly', True)], 'cancel': [('readonly', True)]})
Ảnh đại diện
Huỷ bỏ

Does it really work when using "if", or does it just not throw errors?

Tác giả

it just throws errors when I don't use the if, its absolutely crazy I know.

Tác giả

yes when I use the if it works fine

Tác giả

found the problem. sorry, it is the way I thought the method was called that didn't need to check context and active_id since there would always be a context and active_id, I was wrong.

Tác giả Câu trả lời hay nhất

found the problem, context needs to be checked as well as active_id:

 if context is not None and context.get('active_id'):

...it is the way I thought the method was called that didn't need to check context and active_id since there would always be a context and active_id, I was wrong.

Ảnh đại diện
Huỷ bỏ

The devil was in the details, as usual...

Tác giả

thanks for your help.

Câu trả lời hay nhất

If there is no move_lines, it is False, not None.

Try instead:

if shipment_obj.move_lines:
    for line in shipment_obj.move_lines: 
        #line.name, line.id etc..
Ảnh đại diện
Huỷ bỏ