Skip to main content
 首页 » 编程设计

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

2024年08月13日43mengfanrong

我正在尝试显示用户在项目中的个人资料。我想呈现一个表单,但将其禁用/无法更改(仅显示)。我不知道它的语法。帮助将不胜感激!

这是 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}) 

我基本上只想显示一个只读/禁用的表单。用户然后有一个编辑按钮,将他们带到个人资料编辑页面。

感谢您的帮助!

以下是 html 以防万一:

 <form method="GET" action="/profile_edit">{% csrf_token %} 
                {{ user_form|crispy }} 
                <button type="submit" class="edit btn btn-default btn-block btn-lg">Edit</button><br> 
            </form> 

表格.py

class UserForm(forms.ModelForm): 
 
    password = forms.CharField(label='Password', widget=forms.PasswordInput) 
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput) 
 
    class Meta: 
        model = User 
        fields = ('username', 'first_name', 'last_name', 'email') 

请您参考如下方法:

因为您似乎在使用 django-crispy-forms,所以我会使用以下内容:

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})