неверный литерал для int () с базой 10: ошибка 'Ice Cream' - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь показать складские записи конкретного продукта.При передаче идентификатора этого продукта в складские записи он показывает недопустимый литерал для int () с ошибкой по основанию 10: «Мороженое».Мой код выглядит следующим образом: models.py

class mProduct(models.Model):


 mProduct_id=models.AutoField(primary_key=True)
 mProduct_name=models.CharField(max_length=50)
 mProduct_qtyunit = 
 models.ForeignKey(mProductUnit,on_delete=models.CASCADE) #Product 
                  ##Unit has one to many relationship with 
                        ##mProduct
 mProduct_qty=models.FloatField(default=0) ##current stock



 def __str__(self):
     return self.mProduct_name

class mStock(models.Model):
  mStock_id=models.AutoField(primary_key=True)
  mStock_date=models.DateTimeField(default=timezone.now)
  mStock_product=models.ForeignKey(mProduct,on_delete=models.CASCADE)
  mStock_qty=models.FloatField()

views.py В этом представлении я пытаюсь получить объект для определенного продукта и использовать его для получения записей о своих запасах через filter ().

def mStockDetailView(request,id):
    model=mStock
    m=get_object_or_404(mProduct,mProduct_id=id)

    stock=mStock.objects.filter(mStock_product=m.mProduct_name)
    context={
       'stock':stock,
    }

    return render(request,'dairyapp/stock-details.html',context)

template: productlist.html Я передал идентификатор продукта в качестве параметра с URL.

{% for p in product %}
<a href="{% url 'dairyapp:stock-detail' id=p.mProduct_id %}">
 {{p.mProduct_name}}</a>
{%endfor%}

urls.py

 path('stockrecords/<id>',views.mStockDetailView,name='stock-detail'),

Несмотря на это, я получаю
недопустимый литерал для int () с основанием 10: ошибка «Мороженое»

Кто-нибудь может предложить решение этой ошибки?

Traceback:

Request Method: GET
Request URL: http://localhost:8000/stockrecords/5

Django Version: 2.1.3
Python Version: 3.6.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'dairyapp.apps.DairyappConfig',
 'widget_tweaks']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/media/coder/Multimedia/My Projects/Software/Dairy/Dairy Soft/dairy/dairyapp/views.py" in mStockDetailView
  79.     stock=mStock.objects.filter(mStock_product=m.mProduct_name)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/manager.py" in manager_method
  82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/query.py" in filter
  844.         return self._filter_or_exclude(False, *args, **kwargs)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/query.py" in _filter_or_exclude
  862.             clone.query.add_q(Q(*args, **kwargs))

File "/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py" in add_q
  1263.         clause, _ = self._add_q(q_object, self.used_aliases)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py" in _add_q
  1287.                     split_subq=split_subq,

File "/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py" in build_filter
  1225.         condition = self.build_lookup(lookups, col, value)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/sql/query.py" in build_lookup
  1096.         lookup = lookup_class(lhs, rhs)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/lookups.py" in __init__
  20.         self.rhs = self.get_prep_lookup()

File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/related_lookups.py" in get_prep_lookup
  115.                 self.rhs = target_field.get_prep_value(self.rhs)

File "/usr/local/lib/python3.6/dist-packages/django/db/models/fields/__init__.py" in get_prep_value
  965.         return int(value)

Exception Type: ValueError at /stockrecords/5
Exception Value: invalid literal for int() with base 10: 'Ice Cream'

1 Ответ

0 голосов
/ 28 ноября 2018

Основываясь на результатах трассировки, я вполне уверен, что проблема в этой строке:

stock=mStock.objects.filter(mStock_product=m.mProduct_name)

Вы пытаетесь получить объект mStock путем фильтрации внешнего ключа, который указывает на объект mProduct.Вы используете ключевое слово аргумент mStock_product, поэтому переданное значение должно ссылаться на mProduct.Вы передаете m.mProduct_name, который является строкой.Вместо этого вы должны передать m.mProduct_id, который является вашей ссылкой на объект mProject.Итак, новая строка должна быть:

stock = mStock.objects.filter(mStock_product=m.mProduct_id)

или вы можете позволить Django определить первичный ключ и просто передать объект следующим образом (спасибо ALFlanagan за указание на это):

stock = mStock.objects.filter(mStock_product=m)
...