【问题标题】:add_to_cart() missing 2 required positional arguments: 'product_id' and 'quantity'add_to_cart() 缺少 2 个必需的位置参数:“product_id”和“quantity”
【发布时间】:2021-06-30 00:09:39
【问题描述】:

我是初学者,我不知道该怎么做对不起,请帮助我 追溯

Traceback(最近一次调用最后一次): 文件“C:\Users\daghe\Dev\ecommerce - Backup\lib\site-packages\django\core\handlers\exception.py”,第 47 行,在内部 响应 = get_response(请求) 文件“C:\Users\daghe\Dev\ecommerce - Backup\lib\site-packages\django\core\handlers\base.py”,第 181 行,在 _get_response response = Wrapped_callback(request, *callback_args, **callback_kwargs)

异常类型:/cart/add/ 处的 TypeError 异常值:add_to_cart() 缺少 2 个必需的位置参数:“product_id”和“quantity”

urls.py

from django.urls import path

from .views import (
    cart_home,
    add_to_cart,
    remove_from_cart,
    checkout_home,
    checkout_done_view
)
app_name = 'carts'

urlpatterns = [
    path('', cart_home, name='home'),
    path('checkout/success', checkout_done_view, name='success'),
    path('checkout/', checkout_home, name='checkout'),
    path('add/', add_to_cart, name='add-item'),
    path('remove/<product_id>/', add_to_cart, name='remove-item'),
]

views.py

    def add_to_cart(request, product_id, quantity):
    product = Product.objects.get(id=product_id)
    cart = Cart(request)
    cart.add(product, product.unit_price, quantity)

def remove_from_cart(request, product_id):
    product = Product.objects.get(id=product_id)
    cart = Cart(request)
    cart.remove(product)

def cart_home(request):
    cart = Cart(request)
    return render(request, 'carts/home.html', {"cart":cart})

表格:

2   <form method='POST' action='{% url "cart:add-item" %}' class="form"> {% csrf_token %}
3       <input type='hidden' name='product_id' value='{{ product.id }}' />
4   
5       {% if in_cart %}
6           <button type='submit' class='btn btn-link btn-sm' style="padding:0px;cursor: pointer;">Remove?</button>
7       {% else %}
8           {% if product in cart.products.all %}
9               In cart <button type='submit' class='btn btn-link'>Remove?</button>
10          {% else %}
11              <button type='submit'  class='btn btn-success'>Add to cart</button>
12          {% endif %}

【问题讨论】:

    标签: python django


    【解决方案1】:
    add_to_cart(request, product_id, quantity):   
    

    此方法寻找两个值。 product_id 和数量。

    在你的 urls.py 中也提供这两个值。

    所以 urls.py 将是:

    path('add/<product_id>/<product_quantity>/', add_to_cart, name='add-item'),
    

    形式

    <form method='POST' action='{% url "cart:add-item" product.id product.quantity %}' class="form"> {% csrf_token %}
      <input type='hidden' name='product_id' value='{{ product.id }}' />
    
      {% if in_cart %}
           <button type='submit' class='btn btn-link btn-sm' style="padding:0px;cursor: pointer;">Remove?</button>
      {% else %}
           {% if product in cart.products.all %}
               In cart <button type='submit' class='btn btn-link'>Remove? 
    </button>
         {% else %}
             <button type='submit'  class='btn btn-success'>Add to 
    cart</button>
    {% endif %}
    

    【讨论】:

    • 谢谢,但现在我在上面添加的表单中遇到了这个错误“Reverse for 'add-item' with no arguments not found. 1 pattern(s) tried: ['cart\\/添加\\/(?P[^/]+)\\/(?P[^/]+)\\/$']"
    【解决方案2】:

    我可以看到这里有多个错误:

    1.) add_to_cart 的 url 中缺少参数。如果

    def add_to_cart(request, product_id, quantity):
    

    有两个参数。那么 url 应该是这样的:

    path('add/<product_id>/<quantity>/', add_to_cart, name='add-item'),
    

    2.) 删除的 URL 也调用 add_to_cart。应该是:

    path('remove/<product_id>/', remove_from_cart, name='remove-item'),
    

    【讨论】:

    • 谢谢,但现在我在上面添加的表单中遇到了这个错误“Reverse for 'add-item' with no arguments not found. 1 pattern(s) tried: ['cart\\/添加\\/(?P[^/]+)\\/(?P[^/]+)\\/$']
    • 在表单操作中,url 需要参数。 &lt;form method='POST' action='{% url "cart:add-item" product.id product.quantity %}' class="form"&gt; {% csrf_token %}.. 考虑数量在产品内部(对于 product.quantity)。
    • "未找到带有参数 '(2, '')' 的 'add-item' 的反向。尝试了 1 个模式:['cart\\/add\\/(?P[^/]+)\\/(?P[^/]+)\\/$']" 我现在得到了这个,非常感谢你帮助我顺便说一句
    • 您的数量为空。第二个参数不包含任何内容。请确保您在 HTML 模板中获取数量并将其传递给 url 操作。
    猜你喜欢
    • 2019-02-08
    • 2021-07-22
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多