2016-10-03 3 views
0

私はshipment_detailsフォームを持っています。ここには出荷に関する情報と出荷順のすべてのアイテムがあります。 1つの出荷は2つのモデル情報があり、別のアイテムモデルです。チェックボックスを使用してMarcoの商品出荷額をすべて更新したいと思っています(フォームビューの写真を参照)。 ここは私のフォームビューです http://imgur.com/a/dcNZE ここは私のforms.pyの項目にis_shipped項目のチェックボックスをリンクしたもので、この値は{{form_status.as_p}}を使って表示されます。ここで forms.pyDjango 1.9のフォームから複数のレコードリストを更新するにはどうすればいいですか

class ShipmentStatus(forms.CheckboxInput): 
    input_type = 'checkbox' 

class ShipmentStatusForm((forms.ModelForm)): 
    class Meta: 
     model = Items 
     fields = ['is_shipped'] 
     widgets = { 
      'is_shipped': ShipmentStatus(), 
     } 

私のビューモデルは、ここで

{% extends "_dashboardlayout.html" %} 

{% block content %} 

<div id="page-wrapper"> 
    <div class="row"> 
     <div class="col-lg-12"> 
      <h2 class="page-header">Shipment Details</h2> 
     </div> 
     <div class="col-md-12"> 
      <form method="POST" action=""> 
       {% csrf_token %} 
       {{ form.as_p }} 
       <table class="table table-striped"> 
        <tr> 
         <th>Item No</th> 
         <th>SKU</th> 
         <th>Quantity</th> 
         <th>Price</th> 
         <th>Marco Item</th> 
         <th>Marco Item Shipped</th> 
        </tr> 
        {% for item in items_queryset %} 
        <tr> 
         <td>{{ item.item_no }}</td> 
         <td>{{ item.sku }}</td> 
         <td>{{ item.requested_quantity }}</td> 
         <td>{{ item.price }}</td> 
         <td>{{ item.is_send }}</td> 
         <td>{{ form_status.as_p }}</td> 
        </tr> 
        {% endfor %} 
       </table> 
       <input type="submit" value="Save"> 
      </form> 

     </div> 
    </div> 
    <!-- /.row --> 
</div> 

{% endblock %} 

shipment_detail.htmlである私の制御PYファイルが

ある
def shipment_detail(request, order_id=None): 
    order_queryset = Order.objects.get(order_id=order_id) 
    customer_queryset = Customer.objects.all() 
    address_queryset = Address.objects.all() 
    items_queryset = Items.objects.filter(order_id=order_id).order_by('item_no') 
    shipment_queryset = Shipment.objects.filter(order_id=order_id) 
    # if there is no shipment data then generate shipment details for the Order 
    if not shipment_queryset: 
     form = ShipmentForm(request.POST or None) 
     form_status = ShipmentStatusForm(request.POST or None) 
     if form.is_valid(): 
      instance = form.save(commit=False) 
      instance.order_id = order_queryset 
      order_queryset.save() 
      instance.save() 

     # save item status 
     if form_status.is_valid(): 
      instance = form_status.save(commit=False) 
      instance.save() 

     context = { 
      "form": form, 
      "form_status": form_status, 
      "order_queryset": order_queryset, 
      "customer_queryset": customer_queryset, 
      "address_queryset": address_queryset, 
      "items_queryset": items_queryset, 
     } 
     return render(request, "shipment_detail.html", context) 
    # if there is already data then updated the shipment details for the Order 
    else: 
     instance = get_object_or_404(Shipment, order_id=order_id) 
     form = ShipmentForm(request.POST or None, instance=instance) 

     if form.is_valid(): 
      instance = form.save(commit=False) 
      instance.order_id = order_queryset 
      # updated order is_shipped field according to ship_status 
      if instance.status == True: 
       order_queryset.is_shipped = True 

      if instance.status == False: 
       order_queryset.is_shipped = False 

      # updated order is_completed field according to shipment is_complete field 
      if instance.is_complete == True: 
       order_queryset.is_completed = True 

      if instance.is_complete == False: 
       order_queryset.is_completed = False 

      order_queryset.save() 

      instance.save() 

     print "form status" 

     # updated item is_shipped field 
     instance_status = get_list_or_404(Items, order_id=order_id) 

     for instance in instance_status: 
      form_status = ShipmentStatusForm(request.POST, instance=instance) 
      if form_status.is_valid(): 
       instance = form_status.save(commit=False) 
       instance.save() 

     context = { 
      "form": form, 
      "instance": instance, 
      "form_status": form_status, 
      "order_queryset": order_queryset, 
      "customer_queryset": customer_queryset, 
      "address_queryset": address_queryset, 
      "items_queryset": items_queryset, 
     } 
     return render(request, "shipment_detail.html", context) 

ここでの問題は、すべてのクリックしたときですマルコアイテムが出荷されたしかし、私が1つのfalseをクリックすると、それは価値を保存しません。これを行うには

答えて

2

一つの方法は、チェックボックス

<input type="checkbox" value='{{item.id}}' 
         name='for_action' id='for_action' > 

の値として、オブジェクトの利用PKをされ、あなたはここに行くrequest.POST.getlist('for_action')

を使用して、あなたのビューでこれらのPKのリストを取得することができます!

HTML:

<div class="col-lg-12"> 
     <h2 class="page-header">Shipment Details</h2> 
    </div> 
    <div class="col-md-12"> 
     <form method="POST" action=""> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <table class="table table-striped"> 
       <tr> 
        <th>Item No</th> 
        <th>SKU</th> 
        <th>Quantity</th> 
        <th>Price</th> 
        <th>Marco Item</th> 
        <th>Marco Item Shipped</th> 
       </tr> 
       {% for item in items_queryset %} 
       <tr> 
        <td>{{ item.item_no }}</td> 
        <td>{{ item.sku }}</td> 
        <td>{{ item.requested_quantity }}</td> 
        <td>{{ item.price }}</td> 
        <td>{{ item.is_send }}</td> 
        <td><input type="checkbox" value='{{item.id}}' 
        name='for_action' id='for_action' ></td> 
       </tr> 
       {% endfor %} 
      </table> 
      <input type="submit" value="Save"> 
     </form> 

    </div> 
</div> 
<!-- /.row --> 

{%の末端ブロック%}

views.py

def shipment_detail(request, order_id=None): 
     ######### 

     # save item status 
     list_of_id_for_action = request.POST.getlist('for_action') 
     list_of_obj = Items.objects.filter(pk__in=list_of_id_for_action) 
     list_of_obj.update(is_shipped=True) 

     ###### 


     context = { 
      "form": form, 
      "instance": instance, 
      "form_status": form_status, 
      "order_queryset": order_queryset, 
      "customer_queryset": customer_queryset, 
      "address_queryset": address_queryset, 
      "items_queryset": items_queryset, 
     } 

希望、これはそれが完璧に@Amarの作品

+0

おかげで役立ちます – mahfuz110244

関連する問題