2017-10-18 7 views
0

私はデータ提出のためのフォームを作成しました。ユーザーがそのフォームを正常に記入すると、私はHTTPリダイレクトメソッドを使用しています。今はすべてが大丈夫ですし、ユーザーがページをリフレッシュしたいときにデータが再送信されません。 しかし、フォームを作成し、を押すユーザーの入力を繰り返し入力します。ユーザーがどのくらい押すかを同じデータに追加Enterキーボタン。私はそれをやめたい。ユーザーはを押すことができます。を一度入力してください。ユーザーがEnter Keyboardを2回以上押すと、データはデータベースに追加されません。Django:しばらくすると、重複したデータを再送信しないでください。キーボードのEnterキーを押してください。

は、これは私がモデルクラス内で一意のキーワードを使用し、また、私のviews.py

def dueupdate(request, customer_id): 
    sys_type='updatedue' 

    due_customers = get_object_or_404(CustomerInfo, pk=customer_id) 
    track_invoice = due_customers.duetaka_set.all() 

    if request.method =='POST': 
     due_taka = request.POST['due_taka_add'] 

     due_info_update_add = request.POST['customer_due_info'] 


     due_customers.duetaka_set.create(customer_due_info=due_info_update_add, customer_due=due_taka, customer_due_date=timezone.now()) 

     track_invoice=due_customers.duetaka_set.all() 



     sum_cost_taka = track_invoice.aggregate(
      sp=Sum('customer_due')).get('sp', 0) 


     if sum_cost_taka == None: 
      sum_cost_taka=0 

     total_paid_taka = sum_cost_taka + due_customers.customer_first_time_payment 

     CustomerInfo.objects.filter(id=customer_id).update(
      customer_due_taka_info=total_paid_taka) 

     return HttpResponseRedirect(reverse('shop:customersProfile', args=(due_customers.id, sys_type,))) 

{% extends "shop/base.html" %} 

{% block content_area %} 

<div class="row"> 
    <div class="col-lg-5"> 
     <p>Customers Details</p> 
     <hr> 

     <div class="customers_info_due"> 
      <p>Invoice ID: : {{due_customers.customer_uid}}</p> 
      <p>Name: {{due_customers.customer_name}}</p> 
      <p>Product Name: {{due_customers.customer_product_name}}</p> 
      <p>Price: {{due_customers.customer_price}} TK</p> 
      <p style="color:red">Customer Paid First Time: {{due_customers.customer_first_time_payment}} Taka</p> 

      {% if track_invoice %} 
      <table class="table"> 
       <thead> 
        <tr> 
         <th>SL</th> 
         <th>Paid Taka</th> 
         <th>Paid Date</th> 
        </tr> 
       </thead> 
       <tbody> 
        {% for x in track_invoice %} 
        <tr> 
         <td>{{forloop.counter}}</td> 
         <td>{{x.customer_due}}</td> 
         <td>{{x.customer_due_date}}</td> 

        </tr> 
        {% endfor %} 
        <tr> 
         <td> Total</td> 
         <td><b>{{sum_cost_taka}}</b> TK </td> 
        </tr> 
       </tbody> 
      </table> 
      {% else %} 
      {% endif %} 

      <p>WARRENTY: {{due_customers.customer_product_warrenty}}</p> 
      <p>QN: {{due_customers.customer_product_quantity}}</p> 
      <p>Mobile No: {{due_customers.customer_mobile_no}}</p> 

      <p>Sell Date: {{due_customers.customer_sell_date}}</p> 
     </div> 
    </div> 
    <div class="col-lg-6"> 
     <p>Update customers due info</p> 
     <hr> 
     <div class="due_forms"> 
      <form action="{% url "shop:dueupdate" due_customers.id %}" method="POST"> 
       {% csrf_token %} 
       <div class="form-group"> 
        <label for="">Add this customer name: {{due_customers.customer_name}}</label> 

       </div> 
       <div class="form-group"> 
        <label for="due_taka_add">Due taka add:</label> 
        <input type="number" class="form-control" id="due_taka_add" placeholder="Enter amount" name="due_taka_add" required> 
       </div> 
       <div class="form-group"> 
        <label for="customer_due_info">Write Due Info:</label> 
        <input type="text" class="form-control" id="customer_due_info" placeholder="Write due info" name="customer_due_info"> 
       </div> 

       <button type="submit" class="btn btn-default">Submit</button> 
      </form> 
     </div> 
    </div> 
</div> 

{% endblock content_area %} 

である、これは私のフォームのHTMLファイルですが、私はこの問題を解決するカント。

答えて

0

少なくともこのすべてのフォームを使用する必要があります。「生の」POSTデータは使用しないでください。

https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#django.forms.ModelForm

ビューはに減少し、このようなこと:

def dueupdate(request, customer_id): 
    sys_type='updatedue' 

    due_customers = get_object_or_404(CustomerInfo, pk=customer_id) 
    track_invoice = due_customers.duetaka_set.all() 

    form = CustomerInfoForm(request.POST or None, instance=due_customers) 
    if form.is_valid(): 
     due_customers = form.save() 
     return HttpResponseRedirect(reverse('shop:customersProfile', args=(due_customers.id, sys_type,))) 

は、このフォームにあなたが構築したすべてのロジックを入れて、そのフォームの save方法でデータの更新を行います。

+1

だから私はDjangoフォームを使用する必要があります。 –

+0

はい、それはおそらくそれを解決します – White

関連する問題