1

I have records in my model. I want to list the existing records and edit and add more records. I successfully got the records to my template and edit. I can add new records also. it is working fine in template. But when I post the form is invalid and print invalid message as per my code http response. I can not figure out what is the mistake. Please advise.

forms.py:

       class NewTransForm(forms.ModelForm):
        th_no = forms.DecimalField(max_digits=5,error_messages={"max_digits":"Transaction number 
       should be less than 6 digits.","unique":"Transaction number already exists."})
       class Meta:
    model = TransHeader
    fields = ['th_no','th_dt','th_type', 'th_code','th_cust_code','th_sm_code','th_ref']

...

   urls.py:
    path('edit_sales_transaction_details/<int:trans_id>/',views.EditSalesTransaction,
    name="edit_sales_transaction"),


views.py:


def EditSalesTransaction(request,trans_id):
# template_name= "wstore/edit_sales_transheader_input.html.html"
# trans_id =kwargs['trans_id']
if request.method == "POST":
    print(request.POST)
    form = NewTransForm(request.POST)
    if form.is_valid():
        # trans_id =kwargs['trans_id']
        exist_trans_header = TransHeader.objects.get(id=int(trans_id))
        TransBody.objects.filter(trans_header=exist_trans_header).delete()
        exist_trans_header.delete()
        obj = form.save()
        books = request.POST.getlist('book_code')
        quantities = request.POST.getlist('quantity')
        prices = request.POST.getlist('price')
        for book_code,quantity,price in zip(books,quantities,prices):
            try:
                book = TextBook.objects.get(code=book_code)
                
TransBody.objects.create(trans_header_id=obj.id,quantity=quantity,price=price,book=book)
            except Exception as e:
                print(e)
        if request.POST.get('save_home'):
            return redirect('saltransactions')
    else:
        print(NewTransForm.errors)
        # return redirect(reverse('view_sales_transaction', kwargs=kwargs['trans_id']))
        return HttpResponse("form is invalid.. this is just an HttpResponse object")

else:
    form = NewTransForm()
    context = {}
    # trans_id =kwargs['trans_id']
    context['trans_header'] = TransHeader.objects.get(id=int(trans_id))
    trans_body = TransBody.objects.filter(trans_header=context['trans_header'])
    context['trans_body'] = trans_body
    context['total_quantity'] = trans_body.aggregate(Sum('quantity'))
    context['total_price'] = trans_body.aggregate(Sum('price'))
    context['current_date'] = datetime.datetime.strftime(datetime.datetime.now(),"%Y-%m-%d")
    context['form']  = form
    return render(request, 'wstore/edit_sales_transheader_input.html', context)

...

 edit_sales_transheader_input.html:

  {% block content %}
  <form action="" method="post" class="w-auto" id="new_trans_form" 
  xmlns:width="http://www.w3.org/1999/xhtml">
<div class="row mt-1 mb-4" >
    <div class="col-md-12">
        <div>
            <div class="headerctr">
                <h3>Sales</h3>
                <!-- <div> -->
                <!-- <h3 > -->

                <!-- </h3> -->
            </div>
            <div class="card-body">
                {% csrf_token %}
                <div 38rem class="row style= width:18">
                    <div class="col">
                        <label>Transaction Date</label>
                            <input type="date" class="form-control" name="{{form.th_dt.name}}" 
                   value="{{current_date}}"
                                   readonly>
                        {% if form.th_dt.errors %}
                        {% for error in form.th_dt.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                    <div class="col-sm" >
                        <label>Transaction Number</label>
                        <input type="number" class="form-control" name="{{form.th_no.name}}"
                               value="{{trans_header.id}}" readonly>

                        {% if form.th_no.errors %}
                        {% for error in form.th_no.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                    <div class="col">
                        <label>Transaction Type</label>
                        <input type="hidden" class="form-control" name="{{form.th_type.name}}" 
       required readonly
                            value="INV">
                        {% if form.th_type.errors %}
                        {% for error in form.th_type.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}

                        <label>Transaction Ref.</label>
                        <input type="text" class="form-control" name="{{form.th_ref.name}}" required
                            value="{{trans_header.th_ref}}">
                        {% if form.th_ref.errors %}
                        {% for error in form.th_ref.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                </div>
                <div class="row mt-0">
                    <div class="col">
                        <label>Transaction Code</label>
                        <input type="text" class="form-control" name="{{form.th_code.name}}" required 
          readonly
                            value="POS INV">
                        {% if form.th_code.errors %}
                        {% for error in form.th_code.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                    <div class="col">
                        <label>Transaction Customer Code</label>
                        <input type="text" class="form-control" name="{{form.th_cust_code.name}}" 
          required
                            value="{{trans_header.th_cust_code}}">
                        {% if form.th_cust_code.errors %}
                        {% for error in form.th_cust_code.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                    <div class="col">
                        <label>Transaction Salesman</label>
                        <input type="text" class="form-control" name="{{form.th_sm_code.name}}" 
       required
                               value="{{trans_header.th_sm_code}}">
                        {% if form.th_sm_code.errors %}
                        {% for error in form.th_sm_code.errors  %}
                        <small class="text-danger">{{error}}</small>
                        {% endfor %}
                        {% endif %}
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="col-md-12 mt-0">
        <div class="card shadow">
            <div class="card-header text-center">
                <h3 class="headerctr">
                    Item Details
                </h3>
            </div>
            <div class="card-body">
                {% csrf_token %}
                <table class="">
                    <thead class="thead-light">
                        <tr>
                            <th>Code</th>
                            <th  class = "text-danger">Description</th>
                            <th>Quantity</th>
                            <th  class = "text-danger">Price</th>
                            <th class="text-success">Total Price</th>
                            <th  class = "text-warning">Actions</th>
                        </tr>
                    </thead>
                    <tbody id="books_list" style="margin-bottom: 0">

                            {% for book in trans_body %}
                                <tr>

                                    <td>
                                        <input type="text" name="book_code" class="form-control 
     book_code"
                                               placeholder="Book Code" value="{{book.book.code}}" 
     required>
                                    </td>
                                    <td>
                                        <input type="text" name="book_name" class="form-control 
      book_name"
                                               placeholder="Book Name" value="{{book.book.name}}" 
      readonly>
                                    </td>
                                    <td>
                                        <input type="number" class="form-control quantity" 
      name="quantity"
                                               placeholder="Quantity" value="{{book.quantity}}" 
       required>
                                    </td>
                                    <td>
                                        <input type="text" class="form-control org_price" 
       placeholder="Price"
                                               value="{{book.price}}" readonly >
                                    </td>
                                    <td>
                                        <input type="hidden" class="org_price">
                                        <input type="text" class="form-control price" name="price" 
    placeholder="Total Price"
                                               value="{{book.price}}" readonly>
                                    </td>
                                    <td>
                                        <div class="btn-group">
                                            <button type="button" id="btnadd" class="btn add_new_row" 
     title="Add">
                                                <i class="fas fa-plus-square"></i>
                                            </button>
                                            <button type="button" class="btn delete_row" 
      title="Delete">
                                                <i class="fas fa-trash"></i>
                                            </button>
                                        </div>
                                    </td>
                                </tr>



                            {% endfor %}
                            <tr id="newitem">
                            <td>
                                <input type="text" name="book_code" class="form-control book_code"
                                    placeholder="Book Code" required>
                            </td>
                            <td>
                                <input type="text" name="book_name" class="form-control book_name"
                                    placeholder="Book Name" readonly>
                            </td>
                            <td>
                                <input type="number" class="form-control quantity" name="quantity"
                                    placeholder="Quantity" value="0" required>
                            </td>
                            <td>                                    
                                <input type="text" class="form-control org_price" placeholder="Price"
                                    value="0" readonly>
                            </td>
                            <td>
                                <input type="hidden" class="org_price">
                                <input type="text" class="form-control price" name="price" placeholder="Total Price"
                                    value="0" readonly>
                            </td>                                
                            <td>
                                <div class="btn-group">
                                    <button type="button" id="btnadd" class="btn add_new_row" 
                       title="Add">
                                        <i class="fas fa-plus-square"></i>
                                    </button>
                                    <button type="button" class="btn delete_row" title="Delete">
                                        <i class="fas fa-trash"></i>
                                    </button>
                                </div>
                            </td>
                        </tr>
                    </tbody>
                    <tfoot>
                        <tr>              
                            <td></td>
                            <td></td>                                 
                            <td class = "text-success">Total Quantity: <strong 
        id="final_quantity">0</strong></td>
                            <td></td>                                                 
                            <td class = "text-success"> Total Price: <strong 
          id="final_price">0</strong></td>
                        </tr>
                    </tfoot>
                </table>                    
            </div>
            <div class="col-md-12 mb-1">
                <div class="btn-group">
                    <a href="{% url 'saltransactions' %}"  class="btn btn-info mr-2" >Cancel</a>
         {#                        <input type="submit" class="btn btn-info mr-2" name="save_home" 
        value="Hold">#}
                    <input type="submit" class="btn btn-info submit_form" name="save_next" 
    value="Save&Print">&nbsp;
                </div>
            </div>
        </div>
    </div>
</div>
      </form>
       {% endblock %}

...

  • i don't think you are coding this right. refer this https://stackoverflow.com/questions/1854237/django-edit-form-based-on-add-form – harshil suthar Dec 21 '20 at 11:51

0 Answers0