繁体   English   中英

Django python 动态设置初始值以形成

[英]Django python setting initial values dynamically to form

我正在为库存控制构建一个小型 web 服务。 作为其中的一部分,我想为任何库存项目填充详细视图。 到目前为止,这就是我所拥有的:

class Product_Update(forms.Form):
    Product_Code = forms.CharField(
        max_length=10,
        attrs={"placeholder = <ID here> Readonly = True"
    )
    Name = forms.CharField(max_length=100)
    Description = forms.Textarea(attrs={"Rows": 3})
    price = forms.DecimalField()
    mini = forms.IntegerField()
    Max = forms.IntegerField()

如何将参数传递给表单?

您应该改用ModelForm

class ProductUpdate(forms.Form):

    class Meta:
        model = Product
        fields = ('product_code', 'name', 'description', 'price', 'mini', 'max')

现在您可以轻松地将 model 实例传递给您的表单:

def some_view(request):
    instance = Product.objects.first()
    form = ProductUpdate(request.POST or None, instance=instance)
    context = {'form':form}
    return render(request, 'some_template.html', context)

如果你想在同一个表单中显示多个产品,你需要使用modelformset_factory

from django import forms

ProductFormSet = forms.modelformset_factory(Product, form=ProductUpdate, extra=0)

现在在您的 views.py 中,您可以将QuerySet传递给您的表单:

def some_view(request):
    queryset = Product.objects.all()
    form = ProductFormSet(request.POST or None, queryset=queryset)
    if request.method == 'POST' and form.is_valid():
        form.save()
    context = {'form':form}
    return render(request, 'some_template.html', context)

您可以通过访问 request.POST 来访问视图中的表单数据

def actionView(request, product_id):
   product = Product.objects.get(id=product_id)
   form = ProductUpdate(request.POST, instance=product_id)
   form.save(commit=False) #Do this if you want to make changes to some value
   form.price = 112233
   updated_form = form.save()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM