問題描述
我有一個帶有 RegexField(與普通文本輸入字段非常相似) 的 django 表單。在我看來,在某些情況下,我想把它從用户隱藏起來,並儘量保持形式儘可能相似。
將該字段轉換為 HiddenInput 字段的最佳方式是什麼?我知道我可以使用 form['fieldname'].field.widget.attr['readonly'] = 'readonly'在字段上設置屬性,並且可以使用 form.initial['fieldname'] = 'mydesiredvalue'設置所需的初始值。但是,這不會改變窗口小工具的形式。
什麼是最好的/大多數 django-y /最簡便的方式使這個領域成為一個<input type="hidden"領域?
最佳解決方案
如果您有自定義模板和視圖,則可以排除該字段並使用 {{ modelform.instance.field }}獲取該值。
您也可以更喜歡在視圖中使用:
form.fields['field_name'].widget = forms.HiddenInput()
但我不知道它會保護郵件的保存方法。
希望它有幫助。
次佳解決方案
它也可以是有用的:{{ form.field.as_hidden }}
第三種解決方案
首先,如果您不希望用户修改數據,那麼簡單地排除該字段似乎更為簡潔。將其作為隱藏字段,只需添加更多數據通過電子郵件發送,並在不想要的時候邀請惡意用户進行修改。如果你有一個很好的理由來包含該字段但是隱藏它,你可以將一個關鍵字 arg 傳遞給 modelform 的構造函數。可能這樣的事情
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
from django.forms.widgets import HiddenInput
hide_condition = kwargs.pop('hide_condition',None)
super(MyModelForm, self).__init__(*args, **kwargs)
if hide_condition:
self.fields['fieldname'].widget = HiddenInput()
# or alternately: del self.fields['fieldname'] to remove it from the form altogether.
然後在你的看法:
form = MyModelForm(hide_condition=True)
我更喜歡這種在視圖中修改 modelform 內部的方法,但這是一個口味問題。
第四種方案
一個對我有用的選項,將原始形式的字段定義為:
forms.CharField(widget = forms.HiddenInput(), required = False)
那麼當你在新的類中覆蓋它時,它將保持它的位置。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。