首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int()参数必须是字符串、类似字节的对象或数字,而不是“OrderItem”?姜戈

int()参数必须是字符串、类似字节的对象或数字,而不是“OrderItem”?姜戈
EN

Stack Overflow用户
提问于 2019-06-25 05:45:18
回答 1查看 222关注 0票数 3

我现在正在创建电子商务,当我尝试将商品添加到购物车中时,会返回上面的错误吗?

它抱怨视图中的这行代码:

代码语言:javascript
复制
else:
   order.items.add(order_item)

视图

代码语言:javascript
复制
def add_to_cart(request, slug):
   item = get_object_or_404(Item, slug=slug)
   order_item = OrderItem.objects.get_or_create(
       item=item,
       user = request.user,
       ordered = False
   )
   order_qs = Order.objects.filter(user=request.user, ordered=False)
   if order_qs.exists():
       order = order_qs[0]
       #check if the order item is in the order
       if order.items.filter(item__slug=item.slug).exists():
           order_item.quantity += 1
           order_item.save()
       else:
           order.items.add(order_item)
   else:
       ordered_date = timezone.now()
       order = Order.objects.create(user=request.user, ordered_date=ordered_date)
       order.items.add(order_item)
   return redirect("core:product", slug=slug)

模型

代码语言:javascript
复制
class OrderItem(models.Model):
   user = models.ForeignKey(settings.AUTH_USER_MODEL,    on_delete=models.CASCADE)    
   ordered = models.BooleanField(default=False)
   item = models.ForeignKey(Item, on_delete=models.CASCADE)
   quantity = models.IntegerField(default=1) 



   def __str__(self):
       return f"{self.quantity} of {self.item.title}"

class Order(models.Model):
   user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
   items = models.ManyToManyField(OrderItem)
   start_date = models.DateTimeField(auto_now_add= True)
   ordered_date = models.DateTimeField()
   ordered = models.BooleanField(default=False)

   def __str__(self):
       return self.user.username

回溯

代码语言:javascript
复制
Internal Server Error: /add-to-cart/pants-2/
Traceback (most recent call last):
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/core/views.py", line 38, in add_to_cart
    order.items.add(order_item)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 965, in add
    through_defaults=through_defaults,
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 1092, in _add_items
    '%s__in' % target_field_name: new_ids,
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/query.py", line 892, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/query.py", line 910, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1290, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1318, in _add_q
    split_subq=split_subq, simple_col=simple_col,
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1251, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/sql/query.py", line 1116, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/lookups.py", line 20, in __init__
    self.rhs = self.get_prep_lookup()
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/fields/related_lookups.py", line 59, in get_prep_lookup
    self.rhs = [target_field.get_prep_value(v) for v in self.rhs]
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/fields/related_lookups.py", line 59, in <listcomp>
    self.rhs = [target_field.get_prep_value(v) for v in self.rhs]
  File "/home/vince/Desktop/Dev-Projects/djangoEcommerce/django_project_boilerplate/env/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 966, in get_prep_value
    return int(value)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'OrderItem'
[24/Jun/2019 20:49:06] "GET /add-to-cart/pants-2/ HTTP/1.1" 500 150701

我需要它在购物车中创建一个新的项目,如果它不存在,并且如果它存在于购物车中,它会将类似的项目递增1,而不是重新创建相同的项目。

EN

回答 1

Stack Overflow用户

发布于 2019-12-01 15:05:27

将下面这一行添加到这个文件中。只需添加“created”,如下所示。

代码语言:javascript
复制
 order_item, created = OrderItem.objects.get_or_create(
       item=item,
       user = request.user,
       ordered = False
   )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56744322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档