Одинаковые позиции не совпадают
Перед оформлением сайт проверяет, не изменилась ли корзина с прошлого раза:
cart_changed(old, new) сравнивает два списка позиций. Позиция хранит время,
когда её добавили (added_at), и при каждой загрузке корзины оно обновляется.
Из-за этого корзина «меняется» всегда. Сделайте так, чтобы позиции сравнивались
только по товару и количеству, а added_at остался в объекте и в repr.
Подсказка 1 из 2
Сгенерированный __eq__ сравнивает кортежи всех полей по порядку.
Подсказка 2 из 2
У field есть параметр compare: added_at: datetime = field(compare=False).