仅在UpdateView中禁用Django表单字段

问题描述

我在forms.py中有一个UserForm,这在RegisterEdit Profile功能之间很常见,它的视图也很常见,因为两个视图中有90%的功能相似

我只想在disable页中EMailField UserForm中的Edit Profile,但应该在Register页中进行编辑。这是我的代码

forms.py

class UserForm(forms.ModelForm):
  password = None
  email = forms.EmailField(required=False,disabled=True)  #-- This will disable all the times
  salutation = forms.ChoiceField(choices=Choices.SALUTATIONS)
  blood_group = forms.ChoiceField(choices=Choices.BLOOD_GROUPS)

  class Meta:
    model = User
    fields = ('salutation','blood_group','email','first_name','middle_name','last_name','gender','birth_date','profile')

registeredit视图中都呈现相同的表单。这是我的urls.py。

path('register/',StudentView.as_view(),name='addview'),path('<int:pk>/edit/',name='editview'),

在views.py中(有关详细views.py,请检查accepted answer

userform = UserForm(request.POST or None,instance=self.object)

admission.html

<form class="form" name="admissionForm" id="admissionForm" method="post" 
            enctype="multipart/form-data" action="{% url 'editview' form.instance.id %}"> 
 {% csrf_token %}
  <div class="pages">
     <h4 class="mt-2 mb-3">Personal @R_931_4045@ion</h4>
      {% include "student_errors.html" %}                
      {{userform|crispy}}      
      ....
      <div class="btn_container">
          <button type="submit" class="btn btn-info float-right btn-next">Submit</button>  
      </div>
 </div>

解决方法

在您的update_views中,您可以设置:
form.fields['email'].disabled = True