У меня проблема с методом changeStock класса продукта в views.py в Django

#python #django

#python #django

Вопрос:

Я создаю класс продукта в Django для развлечения, и я столкнулся с проблемой, связанной с изменением продукта (названия модели) относительно его переменной QtyOnHand, которая используется для проверки того, сколько этого продукта есть на складе.

Цель состоит в том, чтобы изменить кол-во элементов продукта на указанную величину с помощью метода changeStock и перенаправить на домашнюю страницу, где будет сохранен обновленный кол-во элементов. Сумма может быть отрицательной при извлечении запасов и ve при получении запасов. Ошибка, которую я получил при вводе URLhttp://127.0.0.1:8000/products/1/changeStock/2 не поддерживаются типы операндов для : int и str, которые были

Вот мой код для метода changeStock в views.py. Комментарии там направлены на то, чтобы направить мой подход к проблеме.

 # Change the stock of a specific product by the specified amount.  A -ve number means that you are taking out product, 
# while a  ve one means you are receiving that product.
def changeStock(request, pk, amount):
    # We need the id of a specific product, plus we have to check if it's not found.
    product = get_object_or_404(Product, pk=pk)
    
    # Then we have to update its qtyOnHand.
    product.qtyOnHand = product.qtyOnHand   amount -> error occurs at this line
    
    # Then we have to save the changes to the database.
    product.save()
    
    # Then we have to redirect to the home page.
    return render(request, 'home.html', {'product': product})
  

Вот мой urls.py , который используется для хранения моих URL-адресов. Часть (?P-? d ) используется для включения чисел, которые являются положительными и отрицательными числами.

 from django.conf.urls import url
from django.contrib import admin
from inventories import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^products/(?P<pk>d )/$', views.product_topics, name='product_topics'),
    url(r'^products/(?P<pk>d )/new/$', views.new_product, name='new_product'),
    url(r'^products/(?P<pk>d )/changeStock/(?P<amount>-?d )$', views.changeStock, name='home'),
    url(r'^admin/', admin.site.urls),
]
  

В моем home.py , который показывает все продукты

 {% extends 'base.html' %}

{% block breadcrumb %}
  <li class="breadcrumb-item active">Products</li>
{% endblock %}

{% block content %}
  <table class="table">
    <thead class="thead-inverse">
      <tr>
        <th>Products</th>
        <th>Price</th>
        <th>Quantity on Hand</th>
      </tr>
    </thead>
    <tbody>
      {% for product in products %}
        <tr>
          <td>
            <a href="{% url 'product_topics' product.pk %}">{{ product.name }}</a>
            <small class="text-muted d-block">{{ product.description }}</small>
          </td>
          <td class="align-middle">
            {{ product.price }}
          </td>
          <td class="align-middle">{{ product.qtyOnHand }} </td>
        </tr>
      {% endfor %}
    </tbody>
  </table>

{% endblock %}
  

И вот models.py для моего класса продукта

 from django.db import models

# Create your models here.
class Product(models.Model):
    name = models.CharField(max_length=30)
    description = models.TextField(max_length=4000)
    price = models.DecimalField(max_digits=19,decimal_places=2)
    qtyOnHand = models.IntegerField()

    def __str__(self):
        return self.name

  

Может кто-нибудь показать мне, что означает эта ошибка, и как я могу ее исправить?

Комментарии:

1. продукт. QtyOnHand — это целое число.

2. Я считаю, что проблема в том, что она product.qtyOnHand amount должна быть product.qtyOnHand int(amount) . По умолчанию все параметры, передаваемые в представление Django, являются строками

3. Спасибо, что помогли мне с этой проблемой, mattyx17. Я изменил его на int (количество), и это решило все. Оказывается, это проблема, когда вы добавляете int в строку.

Ответ №1:

Переданный вами параметр принимается как string в view.so преобразуйте его в int . product.qtyOnHand всегда имеет значение int, как определено в модели.Поэтому не добавляйте string тип в int .Пожалуйста, измените product.qtyOnHand = product.qtyOnHand amount на

 product.qtyOnHand = product.qtyOnHand   int(amount)
  

Я предлагаю вот так.

Комментарии:

1. Таким образом, это подразумевает, что ошибка была вызвана проблемой с приведением типов.