Python 如何覆盖UserChangeForm
这是Django中的源代码,当更改名为xxx//\的用户的权限时,它将有一个错误,但实际上我不想阻止此格式的用户名,所以我想覆盖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 =
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(
...