Django select option rest после появления сообщения об ошибке в шаблоне, если я изменил опцию в select - PullRequest
0 голосов
/ 15 марта 2019

я создал форму для накладной, я использую форму formset,

forms.py

  class Delivery_note_transiction_form(forms.Form):
        item = forms.ModelChoiceField(label=False,queryset=Product.objects.none(),widget=Select2Widget(attrs={"class" : "item"}))
        description = forms.CharField(widget=forms.TextInput(attrs={ 'placeholder' : 'optionall','class' : 'description'}),label=False,required=False)
        quantity = forms.IntegerField(widget=forms.NumberInput(attrs={'class' : 'quantity'}),label=False,min_value=0)
        id = forms.CharField(widget=forms.HiddenInput,required=False)

views.py

def delivery_note_creation(request):
    Delivery_note_transiction_form_formset = forms.formset_factory(form=Delivery_note_transiction_form,can_delete=True)

    if request.method == 'POST':
        inv_no = Invoice_max.objects.get(invoice_name='delivery')
        form = Deliver_Note_Main_Modelform(request.POST,initial={'delivery_invoice_no' : inv_no.invoice_no + 1})
        formset = Delivery_note_transiction_form_formset(request.POST,request.FILES)
        if form.is_valid() and formset.is_valid():

            ins = form.save(commit=False)
            ins.author = request.user
            ins.save()

            for transfer in formset:
                Delivery_Note_Transiction.objects.create(item=transfer.cleaned_data['item'],
                                                         description=transfer.cleaned_data['description'],
                                                         quantity=transfer.cleaned_data['quantity'],
                                                         delivery_invoice_no=ins ,
                                                         )

            max_invoice = Invoice_max.objects.get(invoice_name='delivery')
            max_invoice.invoice_no = max_invoice.invoice_no + 1
            max_invoice.save()

            return HttpResponseRedirect(reverse_lazy('delivery note:delivery note home page'))

    else:
        invoice_create = Invoice_max.objects.get_or_create(invoice_name='delivery')
        inv = Invoice_max.objects.get(invoice_name='delivery')
        form = Deliver_Note_Main_Modelform(initial={ 'deliver_date' : datetime.today(), 'delivery_invoice_no' : inv.invoice_no + 1, 'total_quantity':0})
        formset = Delivery_note_transiction_form_formset()
    return render(request,'delivery_note/delivery note creation.html', { 'deliver_main': form,
                                                                         'delivery_transiction' : formset


       })

trmplate.html

{% extends 'home/base.html' %}
{% load crispy_forms_tags %}
{% block title %}

{% endblock title %}

{% block media %}
    {{ deliver_main.media.css }}
    {{ delivery_transiction.media.css}}
{% endblock media %}

{% block content %}


    <div class="w3-container">
        <h1>Delivery Note</h1>

        <form method="post">{% csrf_token %}
            <div class="row">
                {{ deliver_main.errors }}
                {{ deliver_main.non_field_errors }}
                <div class="row">
                    <div class="col-sm-6">{{ deliver_main.customer|as_crispy_field }}</div>
                    <div class="col-sm-6">{{ deliver_main.deliver_date|as_crispy_field }}</div>

                </div>

                <div class="row">
                    <div class="col-sm-6">{{ deliver_main.delivery_address|as_crispy_field }}</div>
                    <div class="col-sm-6">{{ deliver_main.delivery_invoice_no|as_crispy_field }}</div>
                </div>
            </div>

            <table class="w3-table-all w3-border w3-striped">
                <tr>
                    <th class="col-sm-4">Item</th>
                    <th class="col-sm-4">Description</th>
                    <th class="col-sm-4">Quantity</th>
                </tr>
                {{ delivery_transiction.management_form }}
                {% for error in delivery_transiction.errors %}
                    {{ error }}
                {% endfor %}
                {% for error in delivery_transiction.non_form_errors %}
                    {{ error }}
                {% endfor %}

                {% for delivery in delivery_transiction %}
                    <tr class=" delivery_form ">
                        {{ delivery.id }}
                        <td class="col-sm-4">{{ delivery.item|as_crispy_field  }}</td>
                        <td class="col-sm-4">{{ delivery.description|as_crispy_field  }}</td>
                        <td class="col-sm-4">{{ delivery.quantity|as_crispy_field  }}</td>
                    </tr>
                {% endfor %}
            </table>
            <button id="add-row" type="button">Add Row</button>
            <div class="row ">
                {{ deliver_main.description|as_crispy_field }}
                {{ deliver_main.total_quantity|as_crispy_field }}
            </div>


            <input type="submit" value="Create">
        </form>
    </div>





{% endblock content %}

{% block script %}
    <script>
        $("#id_customer").change(function () {
            var url = "{% url "delivery note:product ajax" %}";
            $.ajax({
                url: url,
                success: function (data) {
                    $(".item").html(data);

                    alert(data)
                }
            })
        })
    </script>

    <script>
        {#for set address in delivery#}
        $("#id_customer").change(function () {
            var customer = $("#id_customer option:selected").text();
            var url = "{% url 'saleinvoice:adress ajax' %}";

            {#for set address#}
            $.ajax({
                url: url,
                data: {
                    'customer': customer
                },
                success: function (data) {
                    $("#id_delivery_address").text(data);
                }
            });
        });


        {#col total calculation#}
        $(document).on("change",".quantity", function () {
            colum_calculation(".delivery_form", ".quantity", "#id_total_quantity")
        })


    </script>



    <script>
        $("#add-row").click(function () {
            var url = "{% url 'delivery note:model add row' %}"
            $.ajax({
                url : url,
                success : function (data) {
                    $(".delivery_form:last").after(data)
                    $(".django-select2").each(function () {
                        $(this).djangoSelect2()
                    })
                    last_formset_settings(".delivery_form", ".delivery_form:last", ".item", ".description", ".quantity")

                }

            })

        })

    </script>

{% endblock script %}


{% block end %}


    {{ deliver_main.media.js }}
    {{ delivery_transiction.media.js }}


{% endblock end %}

форма выбора элемента отображается пустым, поэтому, когда пользователь выбирает какого-либо клиента, он добавляет optio, в элементах, в зависимости от того, какой пользователь выбирает пользователя, код работает нормально, когда в элементах добавляется опция выбора пользователя.но проблема возникает, когда в форме и в шаблоне появляется сообщение об ошибке, сообщение, которое изменяется с помощью ajax при изменении клиента, элемент select переходит обратно к пустому параметру, который запрашивает выбор itm

, поэтому я хочурешение о том, что опция выбора элемента и пользовательский элемент выбора остаются в элементе выбора, даже когда сообщение об ошибке отображается целым числом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...