Я недавно использовал xor в проекте JavaScript на работе, и закончил тем, что добавил 7 строк комментариев для объяснения, что продолжалось. Выравнивание для использования xor в том контексте состояло в том, что одно из условий (term1
в примере ниже) могло взять не два но три значения: undefined
, true
или false
, в то время как другой (term2
) мог быть true
или false
. Я должен был бы добавить дополнительную проверку на эти undefined
случаи, но с xor, следующее было достаточно, так как xor вынуждает первый срок быть сначала оцененным, поскольку булевскую переменную, позволяя undefined
рассматривают как [1 110]:
if (term1 ^ term2) { ...
Это было, в конце, чем-то вроде излишества, но я хотел сохранить его там так или иначе как вид пасхального яйца.
Это должно быть так же просто, как переопределение поведения класса 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. .