Permitindo que o - personagem em nomes de usuário na interface do Django Admin “”

StackOverflow https://stackoverflow.com/questions/1214453

  •  06-07-2019
  •  | 
  •  

Pergunta

No nosso webapp que precisávamos para permitir traços "-" em nossos nomes. Eu já permitiu que, para o processo de inscrição do consumidor muito bem com este regex r '^ [\ w -] + $'

Como posso dizer a aplicação de administração para que eu possa editar nomes de usuários na auth> usuários para permite que o - personagem em nomes de usuário ""? Atualmente eu sou incapaz de editar quaisquer nomes de usuário com traços neles como ele irá retornar um erro de validação no nome do usuário.

Eu gostaria de tentar evitar remendar Django diretamente, se possível. Eu sou bastante novo para programação, mas é isso o que eu usaria "subclasse" para?

Foi útil?

Solução

Isto deve ser tão simples como substituir o comportamento da classe ModelAdmin usuário. Em um de seus aplicativos, em admin.py incluir o seguinte código.

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)

Aqui está uma pequena explicação.

A definição de primeira classe (MyUserCreationForm) é uma subclasse (sim sua terminologia está correta) do UserCreationForm. Esta é a forma que aparece quando você clica em "Adicionar usuário" no site do Django admin. Tudo o que estamos fazendo aqui está redefinindo o campo username para usar nosso melhorado, regex-aceitando hífen, e mudando o helptext para refletir isso.

A segunda definição de classe faz o mesmo, exceto para o UserChangeForm.

A definição de classe final é uma subclasse de UserAdmin, que é o ModelAdmin que usa o modelo de usuário por padrão. Aqui nós estado que queremos usar nossos novos formulários personalizados no ModelAdmin.

Note que para cada uma destas subclasses, só muda o que temos que fazer. O resto da turma será herdada de seu pai (UserCreationForm, UserChangeForm e UserAdmin respectivamente).

Finalmente, realizar a etapa importante de registrar o modelo de usuário com o site de administração. Para fazer isso nós unregister o UserAdmin padrão e, em seguida, registrar com nossa classe MyUserAdmin melhorado.

Você vai encontrar o site de administração do Django é muito fácil de personalizar usando essas técnicas, especialmente considerando o administrador do site é apenas uma aplicação regular de Django.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top