在视图中初始化表单时是否可以指定特定的表单字段?

时间:2013-06-20 23:50:40

标签: python django

我有一个表单,我想在网站上重复使用,但有时候我想省略表单中的特定字段。在视图中初始化表单时是否可以执行此操作?

2 个答案:

答案 0 :(得分:1)

您可能无法删除字段,但您可以使用表单的__init__方法覆盖表单的窗口小部件。

from django import forms
class MyForm(forms.Form):
    some_field=forms.CharField()
    other_field=forms.CharField()

    def __init__(self, my_criteria, *args,**kwrds):
        super(MyForm,self).__init__(*args,**kwrds)
        if my_criteria == 'this':
            self.fields['some_field'].widget = forms.HiddenInput(required=False)
        elif my_criteria == 'that':
             self.fields['other_field'].widget=forms.HiddenInput(required=False)
        #else: pass - leave it the way it is.

如果要渲染不同类型的表单,可以在声明表单时传入具有特定值的参数,并使用该参数在运行时呈现HiddenInput窗口小部件,将其隐藏在表单中

答案 1 :(得分:0)

我认为只有ModelForm才有办法,但你能做的就是这个

fromd django.forms import forms

class MyForm(forms.Form):
     text = forms.CharField()
     another_text = forms.CharField()

并在您看来像:

from myforms import MyForm
from django.shortcuts import render

def view(request):
    form = MyForm(request.POST)
    model = MyModel()
    model.text = form.clean['text']
    model.another_text = "Some value"
    model.save()
    return render(request, 'template.html', {'form':form})

并在您的template.html中:

<form action="">
    {{form.text}}
</form>

这只会在template.html中显示一个文本字段