簡體   English   中英

Django:如何在內聯模型表單集中默認情況下使字段不可編輯?

[英]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 中為表單自動生成表單字段

它不干凈,可能有更好的方法來處理這個問題。

如何從 django 將數據作為可編輯(正常表單集)發送並使用 javascript 進行值檢查,使用 javascript 切換小部件?

form.instance.LastName 將顯示值,form.initial.LastName 將顯示主鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM