例如:
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,这可能吗?
答案 0 :(得分:3)
您可以将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()
# ...
答案 1 :(得分:0)
注意:我正在使用 (Django 3.2)
我尝试添加一个小部件,但它对我不起作用,但我在不使用小部件的情况下以更简单的方式解决了该问题。
class TestModelForm(ModelForm):
ref1 = forms.CharField (widget = forms.Textarea(
attrs = {
'hidden': '',
}
))
我希望这能帮助你或其他人;)