【发布时间】: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