0

私はeコマースアプリに取り組んでおり、顧客がいくつかのアイテムを注文できるようにしたいと考えています。現在、彼らは1つしか注文できず、私はこれをどのように達成できるかを理解するのに苦労しています。私のメニューテンプレートでは、次のようにカテゴリ内のすべてのアイテムを返します。

{% for category in categories %}
 <h5> {{ category.title }} </h5>
  {% for item in category.item.all %}
   <li><a href="{% url item_order item.id %}">{{item.name}}<span> {{item.price}}frw</span></li><a/>

OnClickでは、各アイテムが数量を注文できるフォームにリダイレクトされます。ここにビューがあります:

def show_item(request,id):
    # need to evaluate the HTTP method
    if request.method == 'POST':
        a = Item.objects.get(pk=id)
        form = forms.PartialOrderItemForm(request.POST,instance=a)
        # check validation of posted data
        if form.is_valid():
            order.add_to_order(request)
            # if test cookie worked, get rid of it
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            url =urlresolvers.reverse('order_index')
            # redirect to order page
            return HttpResponseRedirect(url)
    else:
        # it's a GET, create the unbound from. Note request as a Kwarg
        form = forms.PartialOrderItemForm(request.GET)
    # set the test cookie on our first GET request
    request.session.set_test_cookie()
    context={
#       'categories':categories,
        'form':form,
#       'menu':menu,

    }
    return render_to_response('item.html',context,context_instance=RequestContext(request))

ある時点で、上記のビューは次のビューを呼び出します。つまり、フォームを検証した後です。order.add_to_order(request)

注文するアイテムを追加する

def add_to_order(request):  
    postdata = request.POST.copy()
    # get item slug from post data, return blank if empty
#   item_slug = postdata.get('item_slug','')
    #get quantity added, return 0 if empty
    quantity = postdata.get('quantity',0)
    # fetch the item or return  missing page error_message
    i = get_object_or_404(Item,pk=1)
    i.orderitem_set.all()
    # get items in order
    order_items = get_order_items(request)
    item_in_orders = False
    # check to see if item is already in order
    for order_item in order_items:
        if order_item.item.id == i.id:
            #update the quantity if found
            order_item.augment_quantity(quantity)
            item_in_orders = True
    if not item_in_orders:
        # creat and save a new order item
        oi = OrderItem()
        oi.order_id = _order_id(request)
        oi.quantity = quantity
        oi.item = i
        oi.save()

フォームが検証されると、注文が注文ページに表示されます。これがこれを行うビューです

def show_order(request):
    if request.method == 'POST':
        postdata = request.POST.copy()
        if postdata['submit'] == 'Remove':
            order.remove_from_order(request)
        if postdata['submit'] == 'Update':
            order.update_order(request)
    order_items = order.get_order_items(request)
#   page_title  = 'F4L order' 
    order_subtotal = order.order_subtotal(request)

    context = {
        'order_items':order_items,
        'order_subtotal':order_subtotal,
    }
    return render_to_response('public/order.html',context,context_instance=RequestContext(request))

こちらが注文ページのテンプレートの一部です。

<tbody>
    {% if order_items %}
     {% for item in order_items %}
    <tr>
     <td>

       {{ item.item.name }}

     </td>
     <td>{{ item.item.price }}<span> frw</span></td>
     <td class="right">
      <form method="post" action="." class="order">
       {% csrf_token %}
       <label for="quantity">Quantity:</label>
       <input type="text" name="quantity" value="{{ item.quantity }}" id="quantity" size="2" class="quantity" max_length="5" />
       <input type="hidden" name="item_id" value="{{ item.id }}" />
     </td>
     <td>
      <input type="submit" name="submit" value="Update" />
      </form>

これが起こっていることです。最初のアイテムを注文するとpk=1正しく機能しますが、2番目のアイテムなどを注文してフォームに入力すると、注文ページは常に最初のアイテムを返します。どのように私はこれについて行くべきだと思いますか。

4

0 に答える 0