Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中禁用所有表单字段的语法_Python_Django_View - Fatal编程技术网

Python Django中禁用所有表单字段的语法

Python Django中禁用所有表单字段的语法,python,django,view,Python,Django,View,我试图在项目上显示用户的配置文件。我想呈现一个表单,但将其禁用/无法更改(仅显示)。我想不出它的语法。谢谢你的帮助 下面是view.py: @login_required def profile(request): user_form = UserForm(instance=request.user) user_form.fields.disabled = True <------- HELP HERE return render(request, 'rentade

我试图在项目上显示用户的配置文件。我想呈现一个表单,但将其禁用/无法更改(仅显示)。我想不出它的语法。谢谢你的帮助

下面是view.py:

@login_required
def profile(request):
    user_form = UserForm(instance=request.user)
    user_form.fields.disabled = True <------- HELP HERE
    return render(request, 'rentadevapp/profile.html', {'user_form': user_form})

Django 1.9添加了
字段。禁用了
属性:

禁用的布尔参数设置为True时,将使用禁用的HTML属性禁用表单字段,以便用户无法对其进行编辑。即使用户篡改了提交给服务器的字段值,它也会被忽略,取而代之的是表单初始数据中的值

可以执行此操作以禁用视图中所需的字段:

@login_required
def profile(request):
    user_form = UserForm(instance=request.user)
    for fieldname in user_form.fields:
        user_form.fields[fieldname].disabled = True
    return render(request, 'rentadevapp/profile.html', {'user_form': user_form})

因为您似乎正在使用django crispy表单,所以我将使用以下内容:

class UserForm(forms.ModelForm):

    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    def __init__(self,disable_fields=False, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if disable_fields:
            self.fields['password'].disabled = True
            self.fields['password2'].disabled = True

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email')
因此,当您要创建表单时,这应该可以使其正常工作:

@login_required
def profile(request):
    user_form = UserForm(instance=request.user, disable=True)
    return render(request, 'rentadevapp/profile.html', {'user_form': user_form})

UserForm
是您自己定义的自定义表单吗?@lmiguelvargasf,是的。请参阅更新的文本您需要根据您在页面上单击的按钮启用/禁用还是在呈现后重新启用/禁用?@lmiguelvargasf,我只需要禁用该页面我将如何执行所有字段?可能使用for循环我不知道您是否有意这样做,但是,第一段与答案相同。我在这里跟随您,但是如何在我的特定视图中禁用它呢?在创建带有禁用字段的表单对象时,请使用
user\u form=UserForm(instance=request.user,disable\u fields=True)
非常感谢!我希望我的老师能给我更多这方面的背景知识,但他只是让我们参与进来。
class UserForm(forms.ModelForm):

    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    def __init__(self,disable_fields=False, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if disable_fields:
            self.fields['password'].disabled = True
            self.fields['password2'].disabled = True

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email')
@login_required
def profile(request):
    user_form = UserForm(instance=request.user, disable=True)
    return render(request, 'rentadevapp/profile.html', {'user_form': user_form})