如何在Django ModelForm中隐藏字段?
举个例子:
class TestModel(models.Model):
ref1 = models.ForeignKey(RefModel)
text1 = models.TextField()
class TestModelForm(ModelForm):
class Meta:
model = TestModel
fields = ('text1')
我只允许用户输入text1这个字段,但当我重新定义我的视图中的post方法时,我还想设置ref1的值,我该怎么做呢?
我希望能让TestModelForm有ref1这个字段,但不让用户修改它。这样我就可以在post方法中修改request.POST的值,然后把它传给TestModelForm,这样可以吗?
2 个回答
0
注意:我使用的是(Django 3.2)
我尝试添加一个小工具,但没有成功。不过我找到了一种更简单的方法,没有使用小工具就解决了问题。
class TestModelForm(ModelForm):
ref1 = forms.CharField (widget = forms.Textarea(
attrs = {
'hidden': '',
}
))
希望这对你或其他人有帮助;)
19
你可以把 HiddenInput
当作 ref1
小部件来使用:
class TestModelForm(ModelForm):
class Meta:
model = TestModel
widgets = {
'ref1': forms.HiddenInput(),
}
另一种选择是保存表单时把 commit
参数设置为 False
。这样你就可以只在表单中包含可见的字段,然后再用需要的数据更新模型实例:
def some_view(request):
# ...
if request.method == 'POST':
form = TestModelForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
ref = get_ref_according_to_url()
instance.ref1 = ref
instance.save()
# ...