【问题标题】:Allowing the " - " character in usernames in the Django Admin interface在 Django 管理界面中允许用户名中的“-”字符
【发布时间】:2009-07-31 19:33:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    这应该像覆盖 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 以反映这一点。

    第二个类的定义是一样的,除了 UserChangeForm。

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

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

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

    您会发现使用这些技术非常容易自定义 Django 管理站点,尤其是考虑到管理站点只是一个普通的 Django 应用程序。

    【讨论】:

    • 谢谢sixgear,这对我来说很有意义,感谢您花时间写详细的解释。
    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 2023-03-11
    • 2023-03-07
    • 1970-01-01
    • 2020-11-25
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多