Django形成永不过帐

时间:2014-03-20 19:48:42

标签: django django-forms django-templates django-views

这很奇怪。我已经使用Django表格很长时间了,无法解决这个问题。

我有一个带有1个字段的小表格,用于"数量"。每当我提交表单时都没有任何反应,它永远不会进入我的状态来检查请求方法是否是POST。我已经在代码中放了一个pdb,它永远不会到达。我不知道为什么。这是代码。

views.py

def show_product(request, product_slug, template_name='catalog/product.html'):
    product_cache_key = request.path
    product = cache.get(product_cache_key)
    if not product:
        product = get_object_or_404(Product, slug=product_slug)
        cache.set(product_cache_key, product, settings.CACHE_TIMEOUT)
    categories = product.categories.filter(is_active=True)
    if request.method == 'POST':
        import pdb; pdb.set_trace() # it NEVER hit's this
        postdata = request.POST.copy()
        form = ProductAddToCartForm(request, postdata)
        if form.is_valid():
            cart.add_to_cart(request)
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            url = urlresolvers.reverse('show_cart')
            return redirect(url)
    else:
        form = ProductAddToCartForm(request=request)
    form.fields['product_slug'].widget.attrs['value'] = product_slug
    request.session.set_test_cookie()
    context = RequestContext(request, locals())
    return render_to_response(template_name, context)

forms.py

class ProductAddToCartForm(forms.Form):
    quantity = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'input-quantity', 'placeholder': 'Qty'}), error_messages={'invalid': 'Please enter a valid quantity.'}, min_value=1)
    product_slug = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, request=None, *args, **kwargs):
        self.request = request
        super(ProductAddToCartForm, self).__init__(*args, **kwargs)

    def clean(self):
        if self.request:
            if not self.request.session.test_cookie_worked():
                raise forms.ValidationError("Sorry, please enable your cookies.")
        return self.cleaned_data

模板

    <form method="post" action=".">
        {% csrf_token %}
        {{ form.quantity.errors }}
        {{ form.quantity }}
        <input type="submit" name="submit" value="Add to Cart" class="btn btn-danger" />
        {{ form.product_slug }}
    </form>

当我点击&#34;添加到购物车&#34;网址从http://localhost:8000/product/arm-glove/到此http://localhost:8000/product/arm-glove/?csrfmiddlewaretoken=RFG0F1Lg0Eu3GcDhtYwPPCpy9Oct5zCX&quantity=2&submit=Add+to+Cart&product_slug=arm-glove

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

原来有一个用于搜索的未封闭标签,这是一个GET请求,因此表格的POST永远不会被看到。