在Django中自定义用户名和密码字段?

在Django中自定义用户名和密码字段?,django,django-models,django-forms,django-authentication,Django,Django Models,Django Forms,Django Authentication,首先,如何设置用户名的最小长度? ChachaUser.\u meta.get\u字段(“用户名”).min\u length=2不起作用 其次,如何为密码1和密码2放置占位符? forms.PasswordInput(attrs={'placeholder':“6자리 이상"}),不起作用 这是我定制的User模型和UserCreationForm models.py from django.core.validators import RegexValidator from django.c

首先,如何设置
用户名的
最小长度
ChachaUser.\u meta.get\u字段(“用户名”).min\u length=2
不起作用

其次,如何为
密码1
密码2
放置
占位符
forms.PasswordInput(attrs={'placeholder':“6자리 이상"}),不起作用

这是我定制的
User
模型和
UserCreationForm

models.py

from django.core.validators import RegexValidator
from django.contrib.auth.models import AbstractUser
from django.db import models


GENDER_CHOICES = (
    ('M', '남'),
    ('F', '여'),
)

phone_regex = RegexValidator(
    regex=r'^\d{11}$',
    message=" '-' 없이 입력해주세요",
)

username_regex = RegexValidator(
    regex=r'^[0-9a-zA-Z]*$',
    message='아이디는 영어와 숫자로만 구성되어야 합니다.'
)



class ChachaUser(AbstractUser):

    birth = models.DateField("생년월일")
    name = models.CharField(
        "이 름",
        max_length=4
    )
    gender = models.CharField(
        "성 별",
        max_length=1,
        choices=GENDER_CHOICES,
        default='M'
    )

    phone_number = models.CharField(
        "핸드폰",
        validators=[phone_regex],
        max_length=11
    )

    job = models.CharField(
        "직 업",
        max_length=20,
    )

    # python manage.py createsuperuser 할 때 나오는 항목
    REQUIRED_FIELDS = [
        'birth',
        'name',
        'gender',
        'phone_number',
        'job',
        'email'
    ]

ChachaUser._meta.get_field('username').verbose_name = '아이디'
ChachaUser._meta.get_field('username').validators = [username_regex]
ChachaUser._meta.get_field('username').max_length = 20
ChachaUser._meta.get_field('username').min_length = 2
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model


class MyUserCreationForm(UserCreationForm):

    birth = forms.DateField(
        label="생년월일",
        widget=forms.SelectDateWidget(
            years=range(1970, 2015)
        ),
    )

    class Meta(UserCreationForm.Meta):
        model = get_user_model()
        fields = UserCreationForm.Meta.fields + (
            'name',
            'gender',
            'birth',
            'phone_number',
            'job',
        )
        exclude = ('email', )
        widgets = {
            'username' : forms.TextInput(
                attrs={'placeholder': '알파벳, 숫자만 가능(20자 이내)'}
            ),
            'phone_number' : forms.TextInput(
                attrs={'placeholder' : "ex) 01012341234"}
            ),
            'job' : forms.TextInput(
                attrs={'placeholder' : "ex) 한국대 철학과, 선생님 등(20자 이내)"}
            ),
            'password1' : forms.PasswordInput(
                attrs={'placeholder' : "6자리 이상"}
            ),
            'password2' : forms.PasswordInput(
                attrs={'placeholder' : "6자리 이상"}
            ),
        }
forms.py

from django.core.validators import RegexValidator
from django.contrib.auth.models import AbstractUser
from django.db import models


GENDER_CHOICES = (
    ('M', '남'),
    ('F', '여'),
)

phone_regex = RegexValidator(
    regex=r'^\d{11}$',
    message=" '-' 없이 입력해주세요",
)

username_regex = RegexValidator(
    regex=r'^[0-9a-zA-Z]*$',
    message='아이디는 영어와 숫자로만 구성되어야 합니다.'
)



class ChachaUser(AbstractUser):

    birth = models.DateField("생년월일")
    name = models.CharField(
        "이 름",
        max_length=4
    )
    gender = models.CharField(
        "성 별",
        max_length=1,
        choices=GENDER_CHOICES,
        default='M'
    )

    phone_number = models.CharField(
        "핸드폰",
        validators=[phone_regex],
        max_length=11
    )

    job = models.CharField(
        "직 업",
        max_length=20,
    )

    # python manage.py createsuperuser 할 때 나오는 항목
    REQUIRED_FIELDS = [
        'birth',
        'name',
        'gender',
        'phone_number',
        'job',
        'email'
    ]

ChachaUser._meta.get_field('username').verbose_name = '아이디'
ChachaUser._meta.get_field('username').validators = [username_regex]
ChachaUser._meta.get_field('username').max_length = 20
ChachaUser._meta.get_field('username').min_length = 2
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model


class MyUserCreationForm(UserCreationForm):

    birth = forms.DateField(
        label="생년월일",
        widget=forms.SelectDateWidget(
            years=range(1970, 2015)
        ),
    )

    class Meta(UserCreationForm.Meta):
        model = get_user_model()
        fields = UserCreationForm.Meta.fields + (
            'name',
            'gender',
            'birth',
            'phone_number',
            'job',
        )
        exclude = ('email', )
        widgets = {
            'username' : forms.TextInput(
                attrs={'placeholder': '알파벳, 숫자만 가능(20자 이내)'}
            ),
            'phone_number' : forms.TextInput(
                attrs={'placeholder' : "ex) 01012341234"}
            ),
            'job' : forms.TextInput(
                attrs={'placeholder' : "ex) 한국대 철학과, 선생님 등(20자 이내)"}
            ),
            'password1' : forms.PasswordInput(
                attrs={'placeholder' : "6자리 이상"}
            ),
            'password2' : forms.PasswordInput(
                attrs={'placeholder' : "6자리 이상"}
            ),
        }
关于第一个问题:

from django.core import validators    
class ChachaUser(AbstractUser):
    ..................
    AbstractUser._meta.get_field('username').validators=[validators.MinLengthValidator(2)]
对于第二个问题,您无法在
Meta.widgets
中更改
password1
,因为它不是一个模型字段。您可以在
\uuuuu init\uuuu
方法中替代小部件。

对于第一个问题:

from django.core import validators    
class ChachaUser(AbstractUser):
    ..................
    AbstractUser._meta.get_field('username').validators=[validators.MinLengthValidator(2)]

对于第二个问题,您无法在
Meta.widgets
中更改
password1
,因为它不是一个模型字段。您可以替代
\uuuuuu init\uuuuuu
方法中的小部件。

如果有人想知道如何替代
\uuuu init\uuuuu
方法中的小部件。“正如Anna Vracheva在回答OP的第二个问题时提到的,这里有一个小代码片段可以帮助您:

from django.forms import PasswordInput

class MyUserCreationForm(UserCreationForm):

    def __init__(self, *args, **kwargs):
        super(MyUserCreationForm, self).__init__(*args, **kwargs)
        self.fields['password1'].widget = PasswordInput(attrs={'placeholder': 'Password', 'class': 'form-control'})
        self.fields['password2'].widget = PasswordInput(attrs={'placeholder': 'Confirm Password', 'class': 'form-control'})

    class Meta:
        model = User

有关更多信息,请查看此。

如果有人想了解如何“替代
\uuuu init\uuuu
方法中的小部件。”正如Anna Vracheva在回答OP的第二个问题时提到的。这里有一个小代码片段可以帮助您:

from django.forms import PasswordInput

class MyUserCreationForm(UserCreationForm):

    def __init__(self, *args, **kwargs):
        super(MyUserCreationForm, self).__init__(*args, **kwargs)
        self.fields['password1'].widget = PasswordInput(attrs={'placeholder': 'Password', 'class': 'form-control'})
        self.fields['password2'].widget = PasswordInput(attrs={'placeholder': 'Confirm Password', 'class': 'form-control'})

    class Meta:
        model = User

有关更多信息,请查看此问题。

问题。1.是
AbstractUser
,而不是
ChachaUser
?2.出现错误:
模块'django.db.models'没有属性“validators”
@user3595632我已经修复了
验证器的导入。关于
AbstractUser
Chachachauser
,似乎没有er使用什么,但我更喜欢并通常更改用户模型内的用户模型字段。问题。1.是
AbstractUser
,而不是
ChachaUser
?2.出现错误:
模块'django.db.models'没有属性'validators'
@user3595632我有固定的
验证器
导入。关于
AbstractUser
ChachaUser
似乎使用什么并不重要,但我更喜欢并且通常会在用户模型中更改用户模型字段。