如何显示,使用html中的表单设置以django形式提交的输入的值<input value =“ {{” value}} =“” disabled =“” />如何以django形式进行操作

时间:2019-04-25 08:52:47

标签: python django

我要从Views文件中的数据库表中获取值,并且必须将这些值呈现到模板文件中的表单中,该模板文件是使用Forms类创建的,并且我必须显示某些字段的值并使它们不可变。

   class OrderForm(forms.Form):
        pid=forms.IntegerField()
        pname=forms.CharField()
        pprice=forms.FloatField()
        person_name=forms.CharField(max_length=40)
        emailid=forms.EmailField()
        address=forms.CharField(max_length=40)
        city=forms.CharField(max_length=20)
        state=forms.CharField(max_length=20)
        zip=forms.IntegerField()
        card=forms.IntegerField()
        exp= forms.DateField()
        cvv=forms.IntegerField()
    def order(request,pk):
        pid=pk
        user_name=request.user.username
        qs=Product.objects.get(pid=pid)
        pname=qs.pname.format()
        list={'username':user_name,'pid':pid,'pname':pname}
        form=OrderForm
        return render(request,'order.html',{'data':list,'form':form})

我希望输入的文件具有我默认传递的值,该值是不可变的,当我提交时,我必须获得传递的相同值

2 个答案:

答案 0 :(得分:0)

通过Form初始化方法将字段设为禁用,并从视图部分传递initial

class OrderForm(forms.Form):
        pid=forms.IntegerField()
        pname=forms.CharField()
        pprice=forms.FloatField()
        person_name=forms.CharField(max_length=40)
        emailid=forms.EmailField()
        address=forms.CharField(max_length=40)
        city=forms.CharField(max_length=20)
        state=forms.CharField(max_length=20)
        zip=forms.IntegerField()
        card=forms.IntegerField()
        exp= forms.DateField()
        cvv=forms.IntegerField()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].disabled = True
        self.fields['pid'].disabled = True
        self.fields['pname'].disabled = True

在视图中,您可以将字典传递为字段的initial值形式。

def order(request,pk):
        pid=pk
        user_name=request.user.username
        qs=Product.objects.get(pid=pid)
        pname=qs.pname.format()
        initial={'username':user_name,'pid':pid,'pname':pname}
        form=OrderForm(initial=initial)
        return render(request,'order.html',{'data':initla,'form':form})

答案 1 :(得分:0)

在我看来,您最好使用ModelForm。就像这样:

 Cast(ROUND( (pord_line.price * pord_line.qty_received), 2 ) as Decimal(10,2))  AS [Amount Received in Euros],

如果您已经有订单,则可以用class OrderForm(forms.ModelForm) class Meta: model = Order widgets = { `immutable_field` : forms.TextInput(attrs={'readonly':True}) } def order(request,pk): pid=pk user_name=request.user.username qs=Product.objects.get(pid=pid) pname=qs.pname.format() list={'username':user_name,'pid':pid,'pname':pname} form=OrderForm() form.fields['immutable_field'] = "Some Value" return render(request,'order.html',{'data':list,'form':form})

预先填充字段