<p>问题出在父类中。您可以阅读下面的父类代码(对于Django 2.0来说是实际的),以了解您的问题:</p>
<pre><code>class UserChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField(
label=_("Password"),
help_text=_(
"Raw passwords are not stored, so there is no way to see this "
"user's password, but you can change the password using "
"<a href=\"{}\">this form</a>."
),
)
class Meta:
model = User
fields = '__all__'
field_classes = {'username': UsernameField}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password'].help_text = self.fields['password'].help_text.format('../password/')
f = self.fields.get('user_permissions')
if f is not None:
f.queryset = f.queryset.select_related('content_type')
def clean_password(self):
# Regardless of what the user provides, return the initial value.
# This is done here, rather than on the field, because the
# field does not have access to the initial value
return self.initial["password"]
</code></pre>
<p>在方法<code>clean_password</code>中,应用程序尝试返回键<code>password</code>。如您所见,字段<code>password</code>是在<code>fields</code>之外声明的,并在类的所有方法中使用。我知道,你不需要对这个领域做任何事情。
在我看来,在这种情况下,最好的解决方案不是从<code>UserChangeForm</code>中固有的形式。像这样:</p>
^{pr2}$