Python 如何覆盖UserChangeForm

Python 如何覆盖UserChangeForm,python,regex,django,django-forms,Python,Regex,Django,Django Forms,这是Django中的源代码,当更改名为xxx//\的用户的权限时,它将有一个错误,但实际上我不想阻止此格式的用户名,所以我想覆盖UserChangeForm类。你能告诉我怎么做吗?谢谢 class UserChangeForm(forms.ModelForm): username = forms.RegexField( label=_("Username"), max_length=30, regex=r"^[\w.@+-]+$", help_text =

这是Django中的源代码,当更改名为xxx//\的用户的权限时,它将有一个错误,但实际上我不想阻止此格式的用户名,所以我想覆盖UserChangeForm类。你能告诉我怎么做吗?谢谢

class UserChangeForm(forms.ModelForm):
    username = forms.RegexField(
        label=_("Username"), max_length=30, regex=r"^[\w.@+-]+$",
        help_text = _("Required. 30 characters or fewer. Letters, digits and "
                      "@/./+/-/_ only."),
        error_messages = {
            'invalid': _("This value may contain only letters, numbers and "
                         "@/./+/-/_ characters.")})
    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=\"password/\">this form</a>."))

    def clean_password(self):
        return self.initial["password"]

    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserChangeForm, self).__init__(*args, **kwargs)
        f = self.fields.get('user_permissions', None)
        if f is not None:
            f.queryset = f.queryset.select_related('content_type')

尽管如此,还是要感谢你的正则表达式没有做你想做的事。在regex上找到一些教程谷歌“regex教程”。然后我建议买一些软件在windows上测试正则表达式是很好的

我认为表达式^[a-zA-Z0-9@.+-\/\\]+$。应该做你想做的事。您还需要更改“帮助”和“错误”文本-实际上,您正在接受附加字符,而不是您所说的要接受的字符。最后,添加一个最大长度字段以匹配现有帮助文本

class CustomChangeForm(forms.ModelForm):
    username = forms.RegexField(
        label=_("Username"), max_length=30, regex=r"^[a-zA-Z0-9@\.+-_\/\\]+$",
        help_text = _("Required. 30 characters or fewer. Letters, digits and "
                      "@.+-_/\ only."),
        error_messages = {
            'invalid': _("This value may contain only letters, numbers and "
                         "@.+-_/\ characters.")}),
        max_length=30)
        ....
编辑

要重写UserChangeForm,请重写class语句,以便表单从UserChangeForm而不是ModelForm继承-

from django.contrib.auth.forms import UserChangeForm

class CustomChangeForm(UserChangeForm):
    username = forms.RexField(
        ...

查看文档了解更多信息。

谢谢回复,是的,正则表达式已损坏,因为我粘贴的代码是Django的源代码,而不是我自己。我可以在Django的代码中修改正则表达式,但我想在我自己的xx.py文件中覆盖它。
from django.contrib.auth.forms import UserChangeForm

class CustomChangeForm(UserChangeForm):
    username = forms.RexField(
        ...