我的问题-如何在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/时,我可以在“个人信息”部分中看到一个名为“生物”的文本字段,但这再次是空白。 “电子邮件地址”,“用户名”和“密码”与往常一样。
答案 0 :(得分:1)
请勿修改默认的用户模型。如the documentation中所述:
如果您希望存储与用户有关的信息,则可以使用 OneToOneField到包含其他字段的模型 信息。这种一对一模型通常称为配置文件模型,例如 它可能会存储有关站点用户的与身份验证无关的信息。
您绝对不应该修改Django代码。只需创建一个继承自django的UserCreationForm的新表单,然后在其中添加您的字段即可。
查看已接受的答案here。