Django-UserModel-如何在django / contrib / auth / forms.py中创建自定义文本字段

时间:2019-11-06 17:46:34

标签: django

我的问题-如何在django / contrib / auth / forms.py中创建自定义文本字段。 ?

正在尝试调整Django默认用户模型。正在添加名称为“ bio”的测试字段

到目前为止,我在/python3.6/site-packages/django/contrib/auth/forms.py文件中的代码如下-

class UserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """
    error_messages = {
        'password_mismatch': _("The two password fields didn't match."),
    }
    password1 = forms.CharField(
        label=_("Password"),
        strip=False,
        widget=forms.PasswordInput,
        help_text=password_validation.password_validators_help_text_html(),
    )
    password2 = forms.CharField(
        label=_("Password confirmation"),
        widget=forms.PasswordInput,
        strip=False,
        help_text=_("Enter the same password as before, for verification."),
    )

    bio = forms.CharField(   #FOO_bio  # this value --not getting saved in PSQL 
        label=_("bio_test within Forms.py"),
        #widget=forms.PasswordInput, #Didnt work thus switched to forms.TextInput
        widget=forms.TextInput, 
        strip=False,
        help_text=_("Enter some dummy BIO here ."),
    )

在此文件中,使用定义的方法def clean_password2(self)进一步尝试将“ bio”添加为

def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        bio = self.cleaned_data.get("bio") # I have no clue how to do this ? 
        print(bio) #prints None in the terminal 

我确实知道DICT中没有名称为“ bio”的密钥-cleaned_data。

在文件/site-packages/django/contrib/auth/models.py中,已在类models.TextField内添加了“ bio”作为class AbstractUser(AbstractBaseUser, PermissionsMixin):

bio = models.TextField(
        _('bio'), 
        max_length=500, blank=True)

自定义字段“ bio”显示在“注册”表单中,测试用户输入文本值-表单已提交,但在psql中未保存“ bio”的任何内容。已注册新用户,并且可以在终端的-psql中以及在Django Admin中看到新用户。

也是在Django管理员中-当我转到URL-http://digitalcognition.co.in/admin/auth/user/16/change/时,我可以在“个人信息”部分中看到一个名为“生物”的文本字段,但这再次是空白。 “电子邮件地址”,“用户名”和“密码”与往常一样。

1 个答案:

答案 0 :(得分:1)

请勿修改默认的用户模型。如the documentation中所述:

  

如果您希望存储与用户有关的信息,则可以使用   OneToOneField到包含其他字段的模型   信息。这种一对一模型通常称为配置文件模型,例如   它可能会存储有关站点用户的与身份验证无关的信息。

您绝对不应该修改Django代码。只需创建一个继承自django的UserCreationForm的新表单,然后在其中添加您的字段即可。

查看已接受的答案here