Python 如何在django modelform中隐藏字段?
例如:Python 如何在django modelform中隐藏字段?,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,例如: class TestModel(models.Model): ref1 = models.ForeignKey(RefModel) text1 = models.TextField() class TestModelForm(ModelForm): class Meta: model = TestModel fields = ('text1') 我只允许用户输入text1字段,但是当我重新定义视图的post方法时,我还想设置re
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
参数equalFalse
保存表单。通过这种方式,您可以仅在表单中包含可见字段,然后使用所需数据更新模型实例:
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()
# ...
注意:我正在使用(Django 3.2) 我试图添加一个小部件,但它对我不起作用,但我用一种更简单的方法解决了它,而没有使用小部件
class TestModelForm(ModelForm):
ref1 = forms.CharField (widget = forms.Textarea(
attrs = {
'hidden': '',
}
))
我希望这对您或其他人有所帮助;) 如果用户无法修改它,为什么要将其包含在表单中?您在视图中设置它的想法是正确的。你到底在坚持什么?@DanielRoseman举个例子,我希望网站根据用户访问的url自动生成ref1字段。最后有人把这件事说得很清楚。非常感谢。