Использование Ajax для получения общей суммы задолженности перед отправкой в ​​базу данных - PullRequest
1 голос
/ 22 апреля 2020

Попытка использовать Ajax для вычисления и отображения суммы, прежде чем я отправлю что-либо в базу данных. На данный момент это то, что у меня есть, но я не могу ничего показать. Я пытаюсь начать с малого и посмотреть, смогу ли я вообще отобразить значения в полях. Верно ли мое представление для final_price? Или я где-то напутал в Jquery? Я все еще новичок в Ajax, поэтому я не уверен, где я ошибся (следуя инструкциям)

Book Price:      $10  (input field)
Delivery charge: $3   (input field)
Delivery type:   $5   (input field)

[calculate] [submit]

Final Result:    $18  (result of adding the fields above when user clicks the calculate button)

calculate button will display $18
submit button will finalize the results and send the values to the database.

Это моя модель для таблиц

class book(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    book_price = models.IntegerField()
    delivery_charge = models.IntegerField()
    delivery_type = models.IntegerField()
    final_result = models.IntegerField()

    def save(self, *args, **kwargs):
       self.final_result = self.book_price + self.delivery_charge + self.delivery_type
       print(self.final_result)
    super(book, self).save(*args, **kwargs)

просмотров .py для формы

def final_price(request):
    response_data = {}
    if request.method == 'POST':
        form = RequestForm(request.POST)
        book_price = request.POST.get('book_price')
        delivery_charge = request.POST.get('delivery_charge')
        delivery_type = request.POST.get('delivery_type')

        response_data['book_price'] = book_price
        response_data['delivery_charge'] = delivery_charge
        response_data['delivery_type'] = delivery_type

        book.objects.create(book_price=book_price, delivery_charge=delivery_charge,delivery_type=delivery_type)
        return JsonResponse(response_data)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.user = request.user
            instance.save()
            return redirect('final_price')
    else:
        form = RequestForm()
        args = {'form': form}
        return render(request, 'final_price.html', args)

Модель, позволяющая мне редактировать поля в модуле моей книги

class RequestForm(forms.ModelForm):
    class Meta:
        model = book
        fields = (
        'book_price',
        'delivery_charge',
        'delivery_type',
        )

Html file

{% extends 'base.html' %}

{% block content %}    
  <form class="post" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" name="button">Submit</button>
  </form>
  <br>
  <button onclick="myFunction()">Get Quote</button>
  <script type="text/javascript">
    function myFunction(){
      $('.ajaxProgress').show();
      $.ajax({
        type: "POST",
        url: "/final_price",
        dataType: "json",
        async: true,
        data:{
          csrfmiddlewaretoken: '{{ csrf_token }}',
          book_p: $('#book_price').val(),
        },
        success: function(json){
          $('#output').html(json.message);
          $(.ajaxProgress).hide();
        }
      });
    }
  </script>
{% endblock %}

urls .py

urlpatterns = [
    path('', views.home, name='home'),
    path('final_price/', views.final_price, name='final_price'),
]
...