您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Django Admin界面的用户名中允许使用“-”字符

在Django Admin界面的用户名中允许使用“-”字符

这应该像覆盖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 Admin网站中单击“添加用户”时显示的形式。我们在这里所做的所有工作都是重新定义username字段,以使用经过改进的,可以接受连字符的正则表达式,并更改helptext来反映这一点。

第二个类定义执行相同的操作,除了UserChangeForm。

最终的类定义是UserAdmin的子类,它是User模型认使用的ModelAdmin。在这里,我们声明要在ModelAdmin中使用新的自定义表单。

请注意,对于这些子类中的每个子类,我们仅需更改。该类的其余部分将从其父级继承(分别为UserCreationForm,UserChangeForm和UserAdmin)。

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

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

Go 2022/1/1 18:40:37 有361人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶