首页 > 解决方案 > 即使更改小部件后,Django Clear Field 也不会消失

问题描述

我正在尝试为edit_profile我创建的 CustomUser 创建一个页面。我正在使用UserChangeForm. 但我注意到,即使我在 Meta 类中更改了小部件(如本问题中所述),仍会显示 clear 字段。

表格.py

class UserChangeForm(forms.ModelForm):
    profile_picture = forms.FileInput()

    class Meta:
        model = User
        fields = ('email', 'password', 'first_name', 'last_name', 'display_name', 'profile_picture', 'is_active', 'is_staff', 'is_superuser')
                
        widgets = {
            'profile_picture': forms.FileInput(),
       }
            

视图.py

class EditProfileView(UpdateView):
    model  = User    
    template_name = 'edit_profile.html'
    fields = ('email', 'first_name', 'last_name', 'display_name', 'profile_picture')     

edit_profile.html

<form method="post" enctype="multipart/form-data" id="formUpload">
    {% csrf_token %}

     {% for field in form %}
         {{ field|add_class:"form-control-sm"|as_crispy_field }}
     {% endfor %}       

     <button class="btn btn-sm btn-primary" type="submit">Update Profile</button>
</form>

如何删除清除字段?

标签: pythondjangodjango-formsdjango-views

解决方案


您需要指定一个表单域 ( forms.FileField),然后是一个小部件 ( widgets.FileInput)。你链接的问题有正确的方法,但似乎你复制错了。

你的代码应该是这样的:

from django import forms
from django.forms import widgets

class UserChangeForm(forms.ModelForm):
    profile_picture = forms.FileField(widget=widgets.FileInput)

    class Meta:
        model = User
        fields = (
            'email', 'password', 'first_name', 'last_name', 'display_name',
            'profile_picture', 'is_active', 'is_staff', 'is_superuser',
        )
                

推荐阅读