【问题标题】:Posting product quantity in a Django form在 Django 表单中发布产品数量
【发布时间】:2020-08-15 10:43:21
【问题描述】:

我正在使用电子商务 web 应用程序,在产品详细视图中,我想提供在结账前设置数量的选项。我想我可以用一个简单的形式做到这一点:

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>

而且我无法访问我在其他视图中发布的数据。我认为将这样的数据发布到另一个视图是不好的做法,但除此之外我想不出任何办法。有没有其他方法可以将该数据传递到其他视图?

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

【问题讨论】:

标签: python django python-3.x django-models django-views


【解决方案1】:

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

在增加数量的模板中,可以这样写:

<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

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

希望我正确理解了您的问题。

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 2011-11-22
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多