Там слишком много кода, чтобы попытаться выяснить, что происходит, и ваше объяснение не совсем понятно.
Однако, одна очевидная проблема заключается в том, что у вас много пустых except
пункты, что почти всегда плохая идея, поскольку она маскирует любые проблемы, которые могут происходить за пределами того, что вы уже ожидали. Всегда, всегда используйте except
с одним или несколькими фактическими классами исключений - например, except Object.DoesNotExist
.
Во-вторых, вы должны попытаться отладить это, выяснив значения в каждой точке. Самый простой способ - ставить операторы print
после каждого присваивания. Значения должны отображаться в консоли. Это поможет вам точно определить, где ваша логика работает неправильно.