Неверная передача данных из jQuery - Python

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Проблема в том, что JQuery видит data-product_alias = "{{ product.alias }}" нормаль, берёт из БД(Items), а когда передаю в БД(ProductInBasket) из JQuery передаётся, что-то не то - если в функции basketAddingпишу print(data.get('product_alias')) он принтит - tea
Листинг программы
  1. <div id="money_tea_te">
  2. <form id="buy" action="{% url 'basketAdding' %}">{% csrf_token %}
  3. <div class="slect_mass" id="select_mass">
  4. <select name="price_prod" id="weight">
  5. <option value="50">50 гр</option>
  6. <option value="100">100 гр</option>
  7. <option value="200">200 гр</option>
  8. <option value="300">300 гр</option>
  9. <option value="400">400 гр</option>
  10. <option value="500">500 гр</option>
  11. <option value="1000">1000 гр</option>
  12. </select>
  13. </div>
  14. <input type="submit" id="submit_buy" class="submit_buy" name="submit_buy"
  15. value="В корзину" data-product_alias = "{{ product.alias }}" data-product-name = "{{ product.name }}"
  16. data-product-price = "{{ product.price }}">
  17. <input type="submit" id="one_buy" class="one_buy" name="one_buy"
  18. value="Купить в один клик">
  19. <input type="image" id="favorite" class="to_fav" name="submit_fav"
  20. title="В избранное" src="{% static 'res/img/star.png' %}">
  21. </form>
  22. </div>
Листинг программы
  1. var buy_form = $('#buy');
  2. buy_form.on('submit', function (def) {
  3. def.preventDefault();
  4. console.log('123');
  5. var mass = $('#weight').val();
  6. var submit_btn = $('#submit_buy');
  7. var product_alias = submit_btn.data('product_alias');
  8. var product_name = submit_btn.data('product-name');
  9. var product_price = Math.round(submit_btn.data('product-price') * mass / 100);
  10. var data = {};
  11. data.product_alias = product_alias;
  12. data.mass = mass;
  13. data.name = product_name;
  14. data.price = product_price;
  15. var csrf_token = $('#buy [name="csrfmiddlewaretoken"]').val();
  16. data["csrfmiddlewaretoken"] = csrf_token;
  17. var url = buy_form.attr('action');
  18. console.log(data);
  19. $.ajax({
  20. url: url,
  21. type: 'POST',
  22. data: data,
  23. cache: true,
  24. success: function (data) {
  25. console.log('ok');
  26. console.log(data.proTotalNumb)
  27. },
  28. error: function () {
  29. console.log('error');
  30. }
  31. })
  32. });
Листинг программы
  1. class Items(models.Model):
  2. name = models.CharField(max_length=15, verbose_name='Название товара', default='')
  3. price = models.IntegerField(default=0, verbose_name='Цена')
  4. # image = models.CharField(max_length=255, verbose_name='Картинка', default='')
  5. image = models.ImageField(null=True, blank=True, upload_to='image/', verbose_name='Изображение')
  6. alias = models.SlugField(verbose_name='Alias товара', default='')
  7. rating = models.FloatField(default=0, verbose_name='Рейтинг')
  8. def absoluteUrl(self):
  9. return '{}'.format(self.alias)
  10. class Meta:
  11. verbose_name = "Товар"
  12. verbose_name_plural = "Товары"
  13. def __str__(self):
  14. return 'Товар %s' % self.name
Листинг программы
  1. class ProductInBasket(models.Model):
  2. session_key = models.CharField(max_length=128, blank=True, null=True, default=None)
  3. order = models.ForeignKey(Order, blank=True, null=True, default=None)
  4. product = models.ForeignKey(Items, blank=True, null=True, default=None)
  5. is_active = models.BooleanField(default=True)
  6. created = models.DateTimeField(auto_now_add=True, auto_now=False)
  7. updated = models.DateTimeField(auto_now_add=False, auto_now=True)
  8. def __str__(self):
  9. if(self.product):
  10. return '%s' % self.product.name
  11. else:
  12. return '%s' % self.id
  13. class Meta:
  14. verbose_name = 'Товар в корзине'
  15. verbose_name_plural = 'Товары в корзине'
И самое главное -
Листинг программы
  1. def basketAdding(request):
  2. return_dict = dict()
  3. session_key = request.session.session_key
  4. data = request.POST
  5. print(request.POST)
  6. product_alias = data.get('product_alias')
  7. productMass = data.get('mass')
  8. productName = data.get('product_name')
  9. productPrice = data.get('price')
  10. new_product = ProductInBasket.objects.create(session_key=session_key, product_alias=product_alias) #если строку убарть в консоле ошибки нет, но и в БД естественно ничего не добавляется
  11. proTotalNumb = ProductInBasket.objects.filter(session_key=session_key, is_active=True).count()
  12. return_dict['proTotalNumb'] = proTotalNumb
  13. return JsonResponse(return_dict)
В консоли браузера при возове формы сначала пишет - Object {product_alias: "ivan-tea", mass: "50", name: "Иван чай", price: 229, csrfmiddlewaretoken: "rtGnQewuj6kZPSoxI4uxDH1F9YxCxylALLNLbbOk0XxB8xZR3hqGEfYcTn8HcYqA"} Потом - POST http://127.0.0.1:8000/basketAdding 500 (Internal Server Error) error В PyCharm - TypeError: 'product_alias' is an invalid keyword argument for this function. В чём может быть проблема?

Решение задачи: «Неверная передача данных из jQuery»

textual
Листинг программы
  1. def basketAdding(request):
  2.     return_dict = dict()
  3.     session_key = request.session.session_key
  4.     data = request.POST
  5.     print(request.POST)
  6.     product_alias = data.get('product_alias')
  7.     productMass = data.get('mass')
  8.     productName = data.get('name')
  9.     productPrice = data.get('price')
  10.  
  11.  
  12.     new_product = ProductInBasket.objects.create(session_key=session_key, product=Items.objects.get(alias=product_alias), mass=productMass, name=productName, price=productPrice)
  13.  
  14.     proTotalNumb = ProductInBasket.objects.filter(session_key=session_key, is_active=True).count()
  15.     return_dict['proTotalNumb'] = proTotalNumb
  16.     return JsonResponse(return_dict)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут