2017-10-11 80 views
0

我有一個表單,其中有幾個字段,我想向用戶顯示,但阻止他們編輯(不應該是編輯框)。在Django中禁止編輯字段

我的表單類看起來像這樣,我使用字段meta來自動定義它們。我正在尋求防止用戶在註冊後更改他們的用戶名和電子郵件。

class UserEditForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password') 

問題In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited? 不提供答案,如果字段自動使用元確定該怎麼做。

我已經試過

disabled = ('username', 'email',) 

和其他一些選擇,但似乎沒有任何工作。 我正在尋求防止某人更改表單並提交它(以及數據被更改),因爲可以完成前面提出的問題。

[編輯]:使用Django 1.11

+0

你用什麼版本的Django的?編輯:如果你使用pre 1.9,那麼你鏈接的答案應該工作得很好。 – OptimusCrime

+0

我使用1.11最新 – user8734958

+0

你嘗試過[Readonly fields on Form/Modelform](https://djangosnippets.org/snippets/1340/)的片段嗎? –

回答

2

你可以設置你需要在表格後的字段disabled財產被初始化:

class UserEditForm(forms.ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password') 

    def __init__(self, *args, **kwargs): 
     super(UserEditForm, self).__init__(*args, **kwargs) 
     self.fields['username'].disabled = True 
     self.fields['email'].disabled = True 
+0

是的,這也是我的想法。 'disabled'變量是一個'Field'布爾參數,而不是像'fields'這樣的列表定義。 – OptimusCrime

+0

正是我在找的東西。謝謝,非常有幫助。 字段處於編輯狀態,但被禁用。還沒有測試過是否會阻止它們被黑客入侵,但是從Django文檔看來,它們看起來會被忽略。 – user8734958