ユーザーが情報を入力できるようにするビューを作成し、その情報を新しいレコードとして Pyramid フレームワークを使用してデータベースに挿入しました。コードは次のようになります。
def orderplace_view(request):
user = User.get(authenticated_userid(request))
cart = Cart.get_by_user(user)
if cart.itemtypes == None: # cat is empty
request.session.flash(u'Empty cart')
raise HTTPFound(location = request.route_url('cart'))
placeorderform = PlaceOrderForm(request.POST)
placeorderform.address.query = UserAddress.query_by_user(user)
if request.POST and placeorderform.validate():
# create order
order = Order()
order.address = placeorderform.address.data
# fill order with other attributes...
user.orders.append(order)
# IMPORTANT LINE!!!
raise HTTPFound(location = request.route_url('order_list'))
return {'user': user,
'title': 'place order',
'cart': cart,
'placeorderform': placeorderform}
奇妙なことに、「raise HTTPFound()」行をコメントアウトすると、すべてが正常に機能し、新しい注文がデータベースに挿入されます。しかし、ユーザーを注文一覧ページにリダイレクトする行をそのままにしておくと、注文が挿入されません! なぜこれが起こったのですか?