1

我有一个表单,我想在站点周围重复使用,但有时我想从表单中省略特定字段。在视图中初始化表单时是否可以这样做?

4

2 回答 2

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在运行时呈现小部件,从而将其隐藏在表单中

于 2013-06-21T00:14:56.170 回答
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 中显示一个文本字段

于 2013-06-21T00:04:32.967 回答