2012-09-06 22 views
0

我正在用django構建電子商務網站。將所有完成的訂單移至頁面底部

我正在創建處理訂單的頁面。

我想這樣做,當一個項目是「交付」,該訂單將進入列表的底部。

enter image description here

views.py 高清訂單(請求,小時):

#changes status of order from submitted to shipped 
    if request.method == 'POST': 

     SUBMITTED = 1 
     PROCESSED = 2 
     SHIPPED = 3 
     CANCELLED = 4 

     order_id = request.POST['order_id'] 
     this_order = Order.objects.get(pk=order_id) 

     if this_order.status == SUBMITTED or this_order.status == PROCESSED: 
      this_order.status = SHIPPED 

     elif this_order.status == SHIPPED: 
      this_order.status = SUBMITTED 

     this_order.save() 

     return HttpResponseRedirect('/orders/' + hour) 



    #Get all orders from the past 24 hours 
    tz=pytz.timezone('America/Los_Angeles') 
    now_nonaware = datetime.datetime.now() 
    now = timezone.make_aware(now_nonaware,tz) 

    orders = Order.objects.filter(date__range=[now - datetime.timedelta(hours=20), now]).filter(time=hour) 


    #get all orders from every college drop 
    revelle_orders = orders.filter(location = "revelle") 
    muir_orders = orders.filter(location = "muir") 
    marshall_orders = orders.filter(location = "marshall") 
    erc_orders = orders.filter(location = "erc") 
    warren_orders = orders.filter(location = "warren") 
    sixth_orders = orders.filter(location = "sixth") 


    orderlocations = {"revelle": revelle_orders, "muir" : muir_orders, "marshall" : marshall_orders, 
         "erc": erc_orders, "warren": warren_orders, "sixth": sixth_orders} 
    orders_dict = {"orderlocations" : orderlocations, "hour": hour} 
    return render_to_response('orders.html', orders_dict, context_instance=RequestContext(request)) 

HTML:

Order page for {{hour}} 
</br> 
</br> 
{% for location, orders in orderlocations.items %} 

    {% if orders %} 
     {{ location|capfirst }} 
     <table> 
      <tr> 
       <td>#</td> 
       <td>Name</td> 
       <td>Email</td> 
       <td>Order</td> 
       <td>Delivered</td> 
       <td>Phone</td> 


      </tr> 

      {% for ord in orders %} 
       {% for food in ord.orderitem_set.all %} 

       <tr> 
        {% if forloop.counter == 1 %} 
         <td>{{forloop.parentloop.counter}}</td> 
         <td>{{ord.full_name}}</td> 
         <td>{{ord.email}}</td> 

        {% else %} 
         <td colspan="3"></td> 
        {% endif %} 

         <td>{{food.name}} (x{{food.quantity}})</td> 

        {% if forloop.counter == 1 %} 

        <td> 
          <form action="" method="POST"> 
           {% csrf_token %} 
           <input type="hidden" name="order_id" value="{{ ord.pk }}"/> 
           <input type="hidden" name="action=" value="toggledelivery"/> 
           <button type="submit">{% ifnotequal 3 ord.status %} Not {% endifnotequal %}Delivered</button> 
          </form> 
        </td> 

        <td>{{ord.phone}}</td> 
        {% endif %}   

       </tr> 
       {% endfor %} 
      {% endfor %} 

     </table> 
    </br> 
    </br> 
    {% endif %} 

{% endfor %} 

回答

1

這聽起來像一個類model ordering元的選擇工作。

例如,在您的模型類增加一個子類中調用元:

class MyModel(models.Model): 
    # model fields here... 

    class Meta: 
     ordering = ['status'] 

您可以在狀態前面加一個-在降序排序。你也可以連接訂貨在一起的多個領域:

class Meta: 
    ordering = ['status', '-order_date'] 
1

嗯,因爲有這部分

<button type="submit">{% ifnotequal 3 ord.status %} Not {% endifnotequal %}Delivered</button> 

也許這樣的事情在你的命令看法?

orders = Order.objects.filter(date__range=[now - datetime.timedelta(hours=20), now]).filter(time=hour).extra({"is_completed_order": "status == 3"}).order_by('is_completed_order') 

例如,計算一個額外的is_completed_order布爾字段並在其上訂購