0

欢迎,我正在尝试根据会话创建商店。不幸的是,我发生了一个我找不到答案的错误。堆栈上的人说表单没有正确引用。我试图以各种不同的方式提供参考,但没有帮助。当应用程序尝试验证表单时,它会抛出错误:“'IntegerField' object has no attribute 'value_from_datadict'”

这是我的意见.py

def add_to_cart(request, category_id):

if request.method == 'POST':
    #add_product_form = AddProductForm(data = request.POST)
    add_product_form = AddProductForm(data = request.POST, request_product_id=request.POST['product_id'])
    print "%$$$$$$$$$$$$$$$$$ ADD PROFUCT FORM"
    print add_product_form

    if add_product_form.is_valid():
        if not request.session.get('koszyk').get(add_product_form.product_id, None):
            request.session['koszyk'][add_product_form.product_id] = 0
        request.session['koszyk'][add_product_form.product_id] += add_product_form.quantity
        messages.success(request, 'Category added')
        return redirect('tango/products.html')
    else:
        print add_product_form.errors
        messages.error(request, 'Smth went wrong, check log')
else:
    add_product_form = AddProductForm()

print request.session['koszyk'][add_product_form.product_id]
koszyk = request.session['koszyk']
products_list = ShopProduct.objects.all()

print request.session['koszyk']
return render(request, 'tango/cart.html', {'koszyk': koszyk, 'products_list': products_list})

表格.py:

class AddProductForm(forms.ModelForm):
quantity = forms.IntegerField(widget=forms.IntegerField)

def __init__(self, *args, **kwargs):
    # print self.request_product
    self.request_product_id = kwargs.pop('request_product_id', None)
    super(AddProductForm, self).__init__(*args, **kwargs)

    print kwargs

   # self.fields['quantity'].widget.attrs['id'] = "id_quantity_{0}".format(self.request_product_id)


class Meta:
    model = ShopProduct
    fields = ('quantity',)

模型.py:

class ShopProduct(models.Model):
    name = models.CharField(max_length = 100, blank = True, null = True)
    category = models.ForeignKey(ShopCategory, blank = True, null = True)
    price = models.FloatField(default = 0)
    stock = models.IntegerField(default = 0)

最后在我的模板中填写我的表格:

            <form id="custom_user_form" method="post" action="add_product/">
            <td>
                {% csrf_token %}

                {{ add_product_form.as_p }}

                <!-- Provide a button to click to submit the form. -->
                <input id="product_id" type="number" name="product_id" value={{p.id}} hidden="True" />
                <input type="number" id="quantity" name="quantity" value="0" />
            </td>
            <td>
                <button type="submit"  class="btn btn-primary">Add</button>
            </td>
        </form>
4

1 回答 1

1

从表单字段定义中删除widget参数:quantity

class AddProductForm(forms.ModelForm):
    quantity = forms.IntegerField()

我还注意到您错误地尝试quantity从表单中获取价值。为此,您应该使用cleaned_data属性:

request.session['koszyk'][add_product_form.product_id] += \
                                  add_product_form.cleaned_data['quantity']
于 2015-02-13T11:16:31.533 回答