Как я могу редактировать или настраивать требуемые символы поля имени пользователя?

#python #django #django-forms

Вопрос:

Я создаю веб-сайт типа блога, и это в значительной степени сделано, но ранее сегодня я осознал в нем серьезный недостаток. При создании имени пользователя (при регистрации или редактировании своего профиля) запрашиваются определенные символы, но это не позволит мне иметь пробелы в моем имени.

Например, если бы я хотел, чтобы моим именем пользователя было «Winston Pichardo», это будет невозможно, потому что это вызовет ошибку с надписью «разрешены только буквы и цифры как @/./ /-/_».

Итак, как я могу отредактировать эти «требования», чтобы разрешить пробелы в имени пользователя?

Я использую формы django по умолчанию и комбинирую их с Crispy Forms, чтобы все это работало.

вот несколько примеров моего кода:

forms.py

 class UserRegisterForm(UserCreationForm):
    email = forms.EmailField(
        label= 'Correo Electrónico',
        required=True,
    )
    username = forms.CharField(
        label = 'Nombre de Usuario',
        required=True,
    )
    password1 = forms.CharField(
        label = "Contraseña",
        required=True
    )
    password2 = forms.CharField(
        label = "Confirmar Contraseña",
        required=True
    )

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField(
        label='Correo Electrónico',
        required=True
    )

    username = forms.CharField(
        required=True,
        label='Nombre de Usuario'
    )


    class Meta:
        model = User
        fields = ['username', 'email']


class ProfileUpdateForm(forms.ModelForm):
    image = forms.ImageField(
        label = 'Foto de perfil'
    )

    class Meta:
        model = Profile
        fields = ['image']
 

register.html

 {% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Cree su cuenta</legend>
                {{ form|crispy }}
            </fieldset>
            <div>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Registrarse</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                ¿Ya tiene una cuenta? <a class="ml-2" href='{% url 'login' %}'>Inicie sesión</a>
            </small>
        </div>
    </div>             
{% endblock content %}
 

apps.py

 class UsersConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'users'

    def ready(self):
        import users.signals
 

Пожалуйста, не стесняйтесь говорить мне, если вам, ребята, нужно что-то еще из моего кода.

Комментарии:

1. Для этой цели вам необходимо создать пользовательский валидатор и переопределить существующий для username поля. связанные: docs.djangoproject.com/en/2.0/ref/validators

Ответ №1:

Один из способов заключается в том, что вы можете обновить имя пользователя вашей модели и добавить валидатор, например :

 username = models.CharField(max_length=30, unique=True, 
        validators=[
            validators.RegexValidator(r'^[w. @ -] 



, _('Enter a valid username.'), 'invalid')
])