Django从表单中隐藏字段并自动添加字段

时间:2016-05-05 22:48:43

标签: python django forms

我想在购物车中添加我在(product_detail.html)中的实际产品。 所以在product_unit中,只需要指定产品的数量。

无论如何,我无法制作unit_product,自动添加我所在的实际产品。

forms.py

<%:HttpContext.Current.Session[YOUR_STORED_USERNAME_SESSION_KEY]%>

我将产品隐藏在模板中,因为它只是实际产品,无需指定。

views.py

class Product_unitForm(forms.ModelForm):
    class Meta:
        model = Product_unit
        fields = [
            'product',
            'quantity',
        ]

        widgets = {'product': forms.HiddenInput()}

我想从视图中手动,将product_unit的产品字段添加到它拥有的实际产品中(actual_product)

模板

def product_detail(request, id_category=None,id_product=None):
   actual_product = Product.objects.get(id = id_product)
   #Has an actual customer
   #FORM
   form_product_unit = Product_unitForm(request.POST or None)

   form_product_unit.fields['product'] = actual_product # I try to add the product this way

   if form_product_unit.is_valid():
       instance_product_unit = form.save(commit=False)
       instance_product_unit.product.save()

   last_order = Order.objects.last()
   is_buying = False
   if(last_order.status == "en curso"):
       is_buying = True

   context = {
       "Product" : actual_product,
       "Is_buying" : is_buying,
       #FORMS
       "form_product_unit" : form_product_unit,
   }
   return render(request, "shopping/product_detail.html", context)

1 个答案:

答案 0 :(得分:2)

在views.py文件中,我认为您只需进行两次更改

def product_detail(request, id_category=None,id_product=None):
   actual_product = Product.objects.get(id = id_product)
   form_product_unit = Product_unitForm(data=request.POST or None,
       initial={'product': actual_product})

并删除行form_product_unit.fields['product'] = actual_product。您可能需要稍微使用initial字典来使其将正确的值绑定到字段,但这是一般的想法。文档中的相关部分为https://docs.djangoproject.com/en/1.9/ref/forms/api/#dynamic-initial-values