例如:
class TestModel(models.Model):
ref1 = models.ForeignKey(RefModel)
text1 = models.TextField()
class TestModelForm(ModelForm):
class Meta:
model = TestModel
fields = ('text1')
我只允许用户输入text1 字段,但是当我重新定义 View 的post 方法 时,我还想设置ref1值,我该怎么做?
我希望我可以让TestModelForm有ref1字段但不让用户修改它,然后我可以在post方法中修改request.POSt的值,然后将它传递给TestModelForm,可以吗?
请您参考如下方法:
您可以将 HiddenInput 用作 ref1 小部件:
class TestModelForm(ModelForm):
class Meta:
model = TestModel
widgets = {
'ref1': forms.HiddenInput(),
}
另一种选择是使用等于 False 的 commit 参数保存表单。这样您就可以只在表单中包含可见字段,然后用所需数据更新模型实例:
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()
# ...
