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