Я хочу вызвать метод validate_even во время проверки имени пользователя, но он показывает, что имя ‘validate_even’ не определено

#django #python-3.x #django-models

#django #python-3.x #django-models

Вопрос:

Я застрял, чтобы создать пользовательскую проверку для имени пользователя моего forms.py

 from .models import User
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django.core.exceptions import ValidationError
from PIL import Image
from django.utils.translation import ugettext_lazy as _

class SignUpForm(UserCreationForm):
   email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
   first_name = forms.CharField(max_length=30, required=False,                                     help_text='Optional.')
   last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
   phone = forms.CharField(max_length=30, help_text='Phone number', required=False)
   # vv = forms.CharField(max_length=100, help_text='custom', required=False)
   picture = forms.ImageField()
   username = forms.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='required.',validators=[validate_even],  max_length=150),
   class Meta:
      model  = get_user_model()
      fields =('username', 'first_name', 'last_name', 'email', 'password1', 'password2', 'phone','picture')
  

мой models.py является

 from django.db import models
from django.contrib.auth.models import AbstractUser
from PIL import Image
from django.contrib.auth.validators import UnicodeUsernameValidator
class User(AbstractUser):
   pp = models.CharField(max_length=100, blank=True, null=True)
   xx = models.CharField(max_length=100, blank=True, null=True)
   dd = models.CharField(max_length=100, blank=True, null=True)
   vv = models.CharField(max_length=100, blank=True, null=True)
   picture = models.ImageField(upload_to = 'uploads/', default = 'var/www/html/typo3/uploads/no-img.jpg')
   username = models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='baal required.',validators=[validate_even],  max_length=150),
  

мой validators.py является

 import re
from django.core import validators
from django.utils.deconstruct import deconstructible
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
def validate_even(value):
   if value % 2 != 0:
     raise ValidationError(
        _('%(value)s is not an even number'),
        params={'value': value},
    )
  

Какую ошибку я допустил, я не могу понять. Как вызвать мой пользовательский метод в validotrs?

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

1. Вы не забыли включить метод в свой файл формы? Я не вижу инструкции import.

2. Здравствуйте и добро пожаловать в SO. Django — это платформа Python, поэтому от вас, очевидно, ожидают изучения Python, если вы хотите использовать Django. Я любезно предлагаю вам потратить время на то, чтобы выполнить весь официальный учебник по Python, прежде чем что-либо еще, иначе вы потратите свое время на публикацию здесь действительно базовых материалов.

Ответ №1:

Добавьте эту строку в начало models.py и forms.py:

 from .validators import validate_even
  

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

1. хорошо, я сделал именно так. Теперь он показывает неизвестные поля (имена пользователей), указанные для пользователя

2. AbstractUser включает username поле, удалите строку поля имени пользователя в вашем models.py а затем ./manage.py makemigrations amp;amp; ./manage.py migrate и снова запустить сервер.

3. Привет, я хочу использовать пользовательский валидатор и пользовательский help_text для поля имени пользователя. Если я удалю его из моделей. py тогда как я могу использовать пользовательскую проверку для поля имени пользователя?

4. @ARUNIMADAS ваша проблема с «Неизвестными полями (username), указанными для пользователя», совершенно не связана, пожалуйста, отправьте новый вопрос.

5. проверка @ARUNIMADAS задается пользователем в forms.py, не models.py