在Django表单中过帐产品数量

2024-05-12 14:34:05 发布

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

我正在使用一个电子商务webapp,在“产品详细信息”视图中,我想提供在结账前设置数量的选项。我想我可以用一个简单的表格来做:

class QuantityForm(forms.Form):
    quantity = forms.IntegerField(widget=forms.NumberInput(attrs={'class':'required'}))

然后将其实现到视图:

class BagDetailView(DetailView):
    context_object_name = 'ctx'
    model = Bag
    template_name = 'product_page.html'
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = QuantityForm(initial={'quantity':1})
        context['Jackson'] = Bag.objects.get(title = 'Jackson')
        context['Anthony'] = Bag.objects.get(title = 'Anthony')
        return context

但问题是POST请求。我无法调用render()函数,因为我有另一个视图来处理签出,所以我需要调用redirect()。代码如下:

def post(self, *args, **kwargs):
        form = QuantityForm()
        b = Bag.objects.get(slug=kwargs['slug'])
        if form.is_valid:
            return redirect(b)# calls get_absolute_url which redirects to checkout/<slug>

我无法访问我在另一个视图中发布的数据。我认为将这样的数据发布到另一个视图是一种不好的做法,但我只能想出这样的方法。是否有其他方法将该数据传递到其他视图

注意:我没有使用购物车系统,因为我只处理两种产品


Tags: 数据nameform视图getobjects产品context
1条回答
网友
1楼 · 发布于 2024-05-12 14:34:05

我不确定我是否理解正确,也许你可以这样做

在“增加数量”模板中,您可以放置以下内容:

<a href="{% url 'add-to-checkout' order_item.item.slug %}"><i class="">INCREASE QUANTITY</i></a>

当用户单击此按钮时,将调用一个函数:

@login_required
def add_to_checkout(request, slug):
    #get the checkout  for this customer which is not fulfilled
    #increase the quantity
    #redirect to checkout page

另一个想法是使用会话。您可以在详细信息页面中增加金额并将其保存到会话中,然后在签出页面中使用

我希望我正确地理解了你的问题

相关问题 更多 >