Неверная передача данных из jQuery - Python
Формулировка задачи:
Здравствуйте. Проблема в том, что JQuery видит data-product_alias = "{{ product.alias }}" нормаль, берёт из БД(Items), а когда передаю в БД(ProductInBasket) из JQuery передаётся, что-то не то - если в функции basketAddingпишу print(data.get('product_alias')) он принтит - tea
И самое главное -
В консоли браузера при возове формы сначала пишет - 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.
В чём может быть проблема?
Листинг программы
- <div id="money_tea_te">
- <form id="buy" action="{% url 'basketAdding' %}">{% csrf_token %}
- <div class="slect_mass" id="select_mass">
- <select name="price_prod" id="weight">
- <option value="50">50 гр</option>
- <option value="100">100 гр</option>
- <option value="200">200 гр</option>
- <option value="300">300 гр</option>
- <option value="400">400 гр</option>
- <option value="500">500 гр</option>
- <option value="1000">1000 гр</option>
- </select>
- </div>
- <input type="submit" id="submit_buy" class="submit_buy" name="submit_buy"
- value="В корзину" data-product_alias = "{{ product.alias }}" data-product-name = "{{ product.name }}"
- data-product-price = "{{ product.price }}">
- <input type="submit" id="one_buy" class="one_buy" name="one_buy"
- value="Купить в один клик">
- <input type="image" id="favorite" class="to_fav" name="submit_fav"
- title="В избранное" src="{% static 'res/img/star.png' %}">
- </form>
- </div>
Листинг программы
- var buy_form = $('#buy');
- buy_form.on('submit', function (def) {
- def.preventDefault();
- console.log('123');
- var mass = $('#weight').val();
- var submit_btn = $('#submit_buy');
- var product_alias = submit_btn.data('product_alias');
- var product_name = submit_btn.data('product-name');
- var product_price = Math.round(submit_btn.data('product-price') * mass / 100);
- var data = {};
- data.product_alias = product_alias;
- data.mass = mass;
- data.name = product_name;
- data.price = product_price;
- var csrf_token = $('#buy [name="csrfmiddlewaretoken"]').val();
- data["csrfmiddlewaretoken"] = csrf_token;
- var url = buy_form.attr('action');
- console.log(data);
- $.ajax({
- url: url,
- type: 'POST',
- data: data,
- cache: true,
- success: function (data) {
- console.log('ok');
- console.log(data.proTotalNumb)
- },
- error: function () {
- console.log('error');
- }
- })
- });
Листинг программы
- class Items(models.Model):
- name = models.CharField(max_length=15, verbose_name='Название товара', default='')
- price = models.IntegerField(default=0, verbose_name='Цена')
- # image = models.CharField(max_length=255, verbose_name='Картинка', default='')
- image = models.ImageField(null=True, blank=True, upload_to='image/', verbose_name='Изображение')
- alias = models.SlugField(verbose_name='Alias товара', default='')
- rating = models.FloatField(default=0, verbose_name='Рейтинг')
- def absoluteUrl(self):
- return '{}'.format(self.alias)
- class Meta:
- verbose_name = "Товар"
- verbose_name_plural = "Товары"
- def __str__(self):
- return 'Товар %s' % self.name
Листинг программы
- class ProductInBasket(models.Model):
- session_key = models.CharField(max_length=128, blank=True, null=True, default=None)
- order = models.ForeignKey(Order, blank=True, null=True, default=None)
- product = models.ForeignKey(Items, blank=True, null=True, default=None)
- is_active = models.BooleanField(default=True)
- created = models.DateTimeField(auto_now_add=True, auto_now=False)
- updated = models.DateTimeField(auto_now_add=False, auto_now=True)
- def __str__(self):
- if(self.product):
- return '%s' % self.product.name
- else:
- return '%s' % self.id
- class Meta:
- verbose_name = 'Товар в корзине'
- verbose_name_plural = 'Товары в корзине'
Листинг программы
- def basketAdding(request):
- return_dict = dict()
- session_key = request.session.session_key
- data = request.POST
- print(request.POST)
- product_alias = data.get('product_alias')
- productMass = data.get('mass')
- productName = data.get('product_name')
- productPrice = data.get('price')
- new_product = ProductInBasket.objects.create(session_key=session_key, product_alias=product_alias) #если строку убарть в консоле ошибки нет, но и в БД естественно ничего не добавляется
- proTotalNumb = ProductInBasket.objects.filter(session_key=session_key, is_active=True).count()
- return_dict['proTotalNumb'] = proTotalNumb
- return JsonResponse(return_dict)
Решение задачи: «Неверная передача данных из jQuery»
textual
Листинг программы
- def basketAdding(request):
- return_dict = dict()
- session_key = request.session.session_key
- data = request.POST
- print(request.POST)
- product_alias = data.get('product_alias')
- productMass = data.get('mass')
- productName = data.get('name')
- productPrice = data.get('price')
- new_product = ProductInBasket.objects.create(session_key=session_key, product=Items.objects.get(alias=product_alias), mass=productMass, name=productName, price=productPrice)
- proTotalNumb = ProductInBasket.objects.filter(session_key=session_key, is_active=True).count()
- return_dict['proTotalNumb'] = proTotalNumb
- return JsonResponse(return_dict)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д