Django - UserModel - Как создать настраиваемое текстовое поле в django / contrib / auth / forms.py - PullRequest
0 голосов
/ 06 ноября 2019

Мой вопрос - Как создать настраиваемое текстовое поле в 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), я пытаюсь добавить «био» как

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 нет ключа с именем «био» - cleaned_data.

В файле - /site-packages/django/contrib/auth/models.py, добавили «био» как models.TextField, внутри класса class AbstractUser(AbstractBaseUser, PermissionsMixin):

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

Настраиваемое поле «био» отображается вФорма регистрации, тестовый пользователь вводит текстовое значение - форма отправляется, но ничего не сохраняется в psql для «био». Новый пользователь зарегистрирован и может быть замечен как в - psql в терминале, так и в Django Admin.

Также в админке Django - когда я перехожу по URL - http://digitalcognition.co.in/admin/auth/user/16/change/, я вижу текстовое поле с именем «Bio» в разделе «Личная информация», но оно снова пустое. «Адрес электронной почты», «Имя пользователя» и «Пароль» отображаются как обычно.

1 Ответ

1 голос
/ 06 ноября 2019

Не изменяйте модель пользователя по умолчанию. Как упомянуто в документации :

Если вы хотите хранить информацию, относящуюся к Пользователю, вы можете использовать OneToOneField для модели, содержащей поля для дополнительной информации. Эту модель «один к одному» часто называют моделью профиля, так как она может хранить информацию, не связанную с аутентификацией, о пользователе сайта.

И вам определенно не следует изменять код django. Просто создайте новую форму, которая наследуется от UserCreationForm в django, и добавьте туда свои поля.

См. Принятый ответ здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...