2017-10-11 60 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