2017-10-18 3 views
0

J'ai créé un formulaire pour la soumission de données. Lorsqu'un utilisateur remplit ce formulaire, j'utilise la méthode HTTP redirect. Maintenant, tout va bien et les données ne sont pas resoumises lorsque l'utilisateur veut actualiser la page. Mais l'utilisateur remplir ce formulaire et appuyez sur Entrez la clé encore et encore. Mêmes données ajoutées combien d'utilisateur appuyez sur Touche Entrée Touche. Je veux arrêter ça. Un utilisateur peut appuyer sur Entrez la clé. Les données n'ajoutent pas dans la base de données si un utilisateur appuie sur Enter Keyboard seconde ou plus.Django: arrête de resoumettre les données en double lorsque plusieurs fois appuyez sur Entrée Touche de clavier

ceci est ma forme fichier html

{% 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 %} 

ceci est mon 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,))) 

Aussi, je mot-clé unique dans le modèle de classe, mais je ne peux pas résoudre ce problème .

Répondre

0

Vous devrez au moins commencer à utiliser un formulaire pour tout cela et n'utilisez pas vos données POST "brutes".

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

telle que la vue est réduite:

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,))) 

Mettez toute la logique que vous avez construit dans ce formulaire et faire la mise à jour des données dans la méthode save de cette forme.

+1

Je dois donc utiliser des formulaires Django. –

+0

Oui, ça va le résoudre probablement – White