#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. Таким образом, это подразумевает, что ошибка была вызвана проблемой с приведением типов.