以10为基数的int()的文本无效:“Ice Cream”

2024-06-16 11:29:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想展示一种特殊产品的库存记录。将该产品的id传递给库存记录时,它显示的int()文本无效,以10为基数:“Ice Cream”错误。 我的代码如下所示: 型号.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()

你知道吗视图.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)

模板:产品列表.html 我用url传递了产品id作为参数。你知道吗

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

你知道吗网址.py你知道吗

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

尽管如此,我还是得到了
以10为基数的int()的文本无效:“Ice Cream”错误

有人能为这个错误提供解决方案吗?你知道吗

回溯:

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'

Tags: djangoinpyselfiddbmodelslib
1条回答
网友
1楼 · 发布于 2024-06-16 11:29:06

根据回溯,我很确定问题出在这条线上:

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

您正试图通过过滤指向mProduct对象的外键来获取mStock对象。您正在使用关键字参数mStock_product,因此传递的值应该引用mProduct。您正在传递m.mProduct_name,这是一个字符串。相反,应该传递m.mProduct_id,它是对mProject对象的引用。所以,新线应该是:

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

或者您可以让Django找出主键,然后像这样传递对象(感谢A.L.Flanagan指出这一点):

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

相关问题 更多 >