Мой код JQurery-AJAX в проекте Django для отображения значения по умолчанию в поле, основанном на вычислениях, не справляется с этой задачей?

Вот две из нескольких моделей в моем проекте:

class Package(models.Model):
    patient=models.ForeignKey(Patient, on_delete=CASCADE)
    diagnosis=models.ForeignKey(Diagnosis, on_delete=CASCADE)
    treatment=models.ForeignKey(Treatment, on_delete=CASCADE)
    patient_type=models.ForeignKey(PatientType, on_delete=CASCADE)
    date_of_admission=models.DateField(default=None)
    max_fractions=models.IntegerField(default=None)
    total_package=models.DecimalField(max_digits=10, decimal_places=2)
    package_date=models.DateTimeField(auto_now_add=True)

class Receivables(models.Model):
    patient=models.ForeignKey(Patient, on_delete=CASCADE)
    rt_number=models.CharField(max_length=15)
    discount=models.DecimalField(max_digits=9, decimal_places=2, default=0)
    approved_package=models.DecimalField(max_digits=10, decimal_places=2)
    approval_date=models.DateField(default=None)
    proposed_fractions=models.IntegerField()
    done_fractions=models.IntegerField()
    base_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True)
    expected_value=models.DecimalField(max_digits=10, decimal_places=2, blank=True)
    receivables_date=models.DateTimeField(auto_now_add=True)

Мне нужно было, чтобы approved_package в Receivables отображалось значение default, вычисленное путем вычитания discount из total_package в Package. И все это должно происходить в реальном времени. Поэтому я написал AJAX код в Jquery в HTML файле и included файл в моей главной template. Код выглядит так:

<script>
    $('select').change(function () {
     var optionSelected = $(this).find("option:selected");
     var valueSelected  = optionSelected.val();
     var textSelected   = optionSelected.text();
     var csr = $("input[name=csrfmiddlewaretoken]").val();
     console.log(textSelected);
        pkg={patient:textSelected, csrfmiddlewaretoken:csr}
        $.ajax({
            url:"{% url 'pt_name' %}",
            method: "POST",
            data: pkg,
            dataType: "json",
            success: function(data){
                console.log(data);
                console.log(data.pkg);
                console.log(data.ptt);
                var tp=data.pkg;
                var ptt=data.ptt;
                $('#id_discount').change(function(){
                    console.log('tp value: ', tp);
                    console.log('ptt value: ', ptt);
                    var discount=document.getElementById('id_discount').value;
                    console.log('discount value: ', discount);
                    var approved_package=document.getElementById('id_approved_package').value;
                    if (ptt=='CASH')
                    approved_package=tp-discount;
                    console.log('approved package new value: ', approved_package);
                });
            }
        });
    });
</script>

Код работает нормально в console браузере. Он запускает все коды. Он вычисляет approved_package, но результат все еще не отображается в поле как значение по умолчанию, когда я ввожу значение discount. Что не так с моим кодом? Может ли кто-нибудь указать на это?

Думаю, вы забыли изменить значение элемента Html после вычисления нового значения approved_package.

    var approved_package=document.getElementById('id_approved_package').value;
    if (ptt=='CASH')
    approved_package=tp-discount;

    document.getElementById('id_approved_package').value = approved_package
    console.log('approved package new value: ', approved_package);
Вернуться на верх