2015-02-13 2 views
0

Добро пожаловать, я пытаюсь сделать магазин на основе сеансов. К несчастью, я совершил ошибку, за которую я не могу найти ответ. Люди в стеке говорят, что форма не ссылается должным образом. Я пытался сделать ссылку различными способами, но не помогает. Когда приложение пытается проверить форму, он выдает ошибку: "объект 'IntegerField' не имеет атрибута 'value_from_datadict'"Объект IntegerField не имеет атрибута 'value_from_datadict' DJANGO

Это мой views.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}) 

forms.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',) 

models.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> 

ответ

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'] 
Смежные вопросы