Я использую django для настройки функциональности корзины на моем сайте электронной коммерции. Все элементы вводятся как cart_item
s в таблицу MySQL.
Перед вопросом соответствующий код:
charm = False
if postdata.get('charm_sku'):
charm_sku = postdata.get('charm_sku','')
ch = get_object_or_404(Charm, sku=charm_sku)
#get products in cart
cart_products = get_cart_items(request)
product_in_cart = False
# check to see if item is already in cart
for cart_item in cart_products:
if cart_item.product.id == p.id:
if charm == True:
if cart_item.charm.id == ch.id:
# update the quantity if found
cart_item.augment_quantity(quantity)
product_in_cart = True
else:
if cart_item.charm.id == "":
# update the quantity if found
cart_item.augment_quantity(quantity)
product_in_cart = True
Изменить: я переработал код, как показано выше, в результате чего ОБА if cart_item.charm.id
выдавали ошибку attirbuteerror: 'NoneType' object has no attribute 'id'
. В некотором смысле, я думаю, что это улучшило ситуацию, поскольку я подозреваю, что первый, казалось бы, «успешный» был на самом деле первым if charm == True
, потерпевшим неудачу, таким образом, никогда не проверяя первый if cart_item.charm.id == ch.id
. Остается вопрос: почему это вызывает AttributeError, когда цикл For явно объявляет cart_item, а cart_items явно имеет как столбец очарования, так и идентификатор, назначенный указанным столбцам?
Редактировать 2: Могу ли я не ссылаться на cart_item из вложенных if? Это единственное, о чем я могу думать, но в то же время я чувствую, что должен быть в состоянии, так что, может быть, это неправильно?
if x ==True: elif x == False:
предпочтительнее использовать идиомуif x: else:
. Если вы ДОЛЖНЫ определить, равны ли они точноTrue
илиFalse
, вы должны использоватьif x is True: elif x is False:
Это потому, что (например)0 == False
верно, а0 is False
ложно. - person SethMMorton   schedule 09.04.2013