python - 在 Django 管理界面的用户名中允许 "- "字符

标签 python django django-admin

在我们的网络应用程序中,我们需要在我们的用户名中允许破折号“-”。 我已经为消费者注册过程启用了这个正则表达式 r'^[\w-]+$'

我如何告诉管理应用程序以便我可以在 auth > users 中编辑用户名以允许用户名中的“-”字符?目前我无法编辑任何带有破折号的用户名,因为它会返回用户名验证错误。

如果可能,我想尝试避免直接修补 django。 我对编程还很陌生,但这就是我要使用“子类化”的目的吗?

最佳答案

这应该与覆盖 User ModelAdmin 类的行为一样简单。在您的某个应用中,在 admin.py 中包含以下代码。

from django.contrib import admin
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm

class MyUserCreationForm(UserCreationForm):
    username = forms.RegexField(
        label='Username', 
        max_length=30, 
        regex=r'^[\w-]+$',
        help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).',
        error_message = 'This value must contain only letters, numbers, hyphens and underscores.')

class MyUserChangeForm(UserChangeForm):
    username = forms.RegexField(
        label='Username', 
        max_length=30, 
        regex=r'^[\w-]+$',
        help_text = 'Required. 30 characters or fewer. Alphanumeric characters only (letters, digits, hyphens and underscores).',
        error_message = 'This value must contain only letters, numbers, hyphens and underscores.')

class MyUserAdmin(UserAdmin):
    form = MyUserChangeForm
    add_form = MyUserCreationForm

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

这里有一点解释。

第一个类定义 (MyUserCreationForm) 是 UserCreationForm 的子类(是的,您的术语是正确的)。这是当您在 Django 管理站点中单击“添加用户”时出现的表单。我们在这里所做的只是重新定义 username 字段以使用我们改进的、接受连字符的正则表达式,并更改 helptext 以反射(reflect)这一点。

第二个类定义做同样的事情,除了 UserChangeForm。

最后的类定义是UserAdmin的子类,也就是User模型默认使用的ModelAdmin。在这里我们声明我们想在 ModelAdmin 中使用我们新的自定义表单。

请注意,对于这些子类中的每一个,我们只更改我们必须更改的内容。该类的其余部分将从其父类(分别为 UserCreationForm、UserChangeForm 和 UserAdmin)继承。

最后,我们执行在管理站点注册用户模型的重要步骤。为此,我们取消注册默认的 UserAdmin,然后注册我们改进的 MyUserAdmin 类。

您会发现使用这些技术可以非常轻松地自定义 Django 管理站点,尤其是考虑到管理站点只是一个常规的 Django 应用程序。

关于python - 在 Django 管理界面的用户名中允许 "- "字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214453/

相关文章:

django - 确定请求的内容类型?

django - Django ORM 中的 SQL 何时执行

python - 关于 Python 解析器生成器的建议

python - 使 django webapp 自行重启的最佳实践

python - oscarcommerce目录导入

Django 管理员搜索 : how to override the default handler?

c# - Django Like 用于 C# MVC 的管理项目

django - 在管理界面中显示 django_extensions 的创建/修改字段

python - 如何在 Amazon S3 上存储 scrapy 图像?

python - 如何对传感器进行编程以中断主线程或Python中的程序