[英]Django: How do I make fields non-editable by default in an inline model formset?
我有一個內聯模型表單集,如果這些字段在頁面加載時已經有值,我想讓這些字段不可編輯。 如果用戶單擊該行上的“編輯”按鈕,它將變為可編輯並且(使用 JavaScript)我會將原始小部件替換為可編輯的小部件。 我想在加載頁面時做這樣的事情:
for field in form.fields:
if field.value:
# display as text
else:
# display as my standard editable widget for this field
我看到inlineformset_factory
有一個名為formfield_callback
的參數。 我懷疑這可能很有用,但因為我還沒有找到任何文檔。 誰能給我指出一些有用的文檔,以及它如何幫助我解決這個問題?
這個也讓我有點難受。 希望這就是你正在尋找的。
<TABLE>
<form method="post" action=".">
{{ formset.management_form }}
{% for form in formset.forms %}
{{ form.id }}
<tr>
<td>{{ form.FirstName }}</td> <!-- This is a normal, editable field -->
<td>{{ form.instance.LastName }}</td> <!-- 'instance' is your actual Django model. LastName displays the text from the last name field -->
</tr>
{% endfor %}
</form>
</TABLE>
這個線程有點舊,但對於任何正在尋找的人:
形式:
myfield=forms.CharField( widget=forms.TextInput(attrs={'class':'disabled', 'readonly':'readonly'}))
“只讀”是一個 HTML 屬性,它使表單不可編輯。 “禁用”是一個 CSS 類,因為您需要修改默認樣式,它還使 jQuery 更簡單。
要在單擊時使只讀輸入可編輯,這是一個 jQuery 示例:
$('input.disabled').click(function(){
$(this).removeAttr('readonly').removeClass('disabled');
});
我認為您可以覆蓋表單集中使用的表單的 init 函數。 在那里您可以檢查initial_data,並像您希望的那樣動態構建表單。 至少,這在我的腦海中聽起來似乎是合理的。
我有一個問題,我想“ 自動生成表單字段”,可以找到動態創建表單的解決方案,它可能會有所幫助:
它不干凈,可能有更好的方法來處理這個問題。
如何從 django 將數據作為可編輯(正常表單集)發送並使用 javascript 進行值檢查,使用 javascript 切換小部件?
form.instance.LastName 將顯示值,form.initial.LastName 將顯示主鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.