例如:
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,这可能吗?
最佳答案
您可以将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()
# ...