#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