Разрешение “-” символ в именах пользователей в интерфейсе Django Admin

Я недавно использовал xor в проекте JavaScript на работе, и закончил тем, что добавил 7 строк комментариев для объяснения, что продолжалось. Выравнивание для использования xor в том контексте состояло в том, что одно из условий (term1 в примере ниже) могло взять не два но три значения: undefined, true или false, в то время как другой (term2) мог быть true или false. Я должен был бы добавить дополнительную проверку на эти undefined случаи, но с xor, следующее было достаточно, так как xor вынуждает первый срок быть сначала оцененным, поскольку булевскую переменную, позволяя undefined рассматривают как [1 110]:

if (term1 ^ term2) { ...

Это было, в конце, чем-то вроде излишества, но я хотел сохранить его там так или иначе как вид пасхального яйца.

7
задан Tristan Brotherton 31 July 2009 в 19:33
поделиться

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. Все, что мы здесь делаем, это переопределяем поле имя пользователя , чтобы использовать наше улучшенное регулярное выражение с дефисом, и изменяем текст справки , чтобы отразить это.

Второе определение класса делает то же самое. , за исключением UserChangeForm.

Окончательное определение класса является подклассом UserAdmin, который является ModelAdmin, который модель User использует по умолчанию. Здесь мы заявляем, что хотим использовать наши новые настраиваемые формы в ModelAdmin.

Обратите внимание, что для каждого из этих подклассов мы изменяем только то, что нам нужно. Остальная часть класса будет унаследована от своего родителя (UserCreationForm, UserChangeForm и UserAdmin соответственно).

Наконец, мы выполняем важный шаг регистрации модели User на сайте администратора. Для этого мы отменяем регистрацию UserAdmin по умолчанию, а затем регистрируемся в нашем улучшенном классе MyUserAdmin.

Вы обнаружите, что сайт администратора Django очень легко настроить с помощью этих методов, особенно учитывая, что сайт администратора - это просто обычное приложение Django. .

UserChangeForm и UserAdmin соответственно).

Наконец, мы выполняем важный шаг по регистрации модели User на сайте администратора. Для этого мы отменяем регистрацию UserAdmin по умолчанию, а затем регистрируемся в нашем улучшенном классе MyUserAdmin.

Вы обнаружите, что сайт администратора Django очень легко настроить с помощью этих методов, особенно учитывая, что сайт администратора - это просто обычное приложение Django. .

UserChangeForm и UserAdmin соответственно).

Наконец, мы выполняем важный шаг по регистрации модели User на сайте администратора. Для этого мы отменяем регистрацию UserAdmin по умолчанию, а затем регистрируемся в нашем улучшенном классе MyUserAdmin.

Вы обнаружите, что сайт администратора Django очень легко настроить с помощью этих методов, особенно учитывая, что сайт администратора - это просто обычное приложение Django. .

18
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: