Как сохранить данные из формы пользователя, которая реализована встроенной аутентификацией. Пользователь, использующий UserCreationForm в Django? - PullRequest
0 голосов
/ 31 марта 2020

Привет, я новичок в Django и создал модель входа / выхода из системы Django со встроенными User и UserCreationForm. Он работает нормально, но моя проблема в том, что я определил два пользовательских ввода в моей форме, и он отображается на веб-странице, когда я запускаю сервер, но когда я проверяю пользователя под администратором, я вижу только детали пользовательских полей, а не мои настраиваемые поля.

Как сохранить данные в моей модели пользователя? или, может быть, если я неправильно определил пользовательские поля, как я могу изменить его, чтобы я мог сохранить его данные в моей модели.

Мои пользовательские поля, которые являются адресом и номером телефона, не отображаются в Admin User и его данных не сохраняется.

model.py

from django.db import models
from django.contrib import auth
# Create your models here.
class User(auth.models.User,auth.models.PermissionsMixin):

    def __str__(self):
        return "@{}".format(self.username)

forms.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from django import forms
class UserCreateform(UserCreationForm):

    address = forms.CharField(max_length=150, required=True)
    phone_number = forms.IntegerField(required=True)

    class Meta(UserCreationForm.Meta):

        model = get_user_model()
        fields = ('username','email','password1','password2')


        def __init__(self,*args,**kwargs):
            super().__init__(*args,**kwargs)
            self.fields['username'].label = 'Display Name'

views.py

from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic import CreateView
from . import forms
# Create your views here.

class SignUp(CreateView):
    form_class = forms.UserCreateform
    success_url = reverse_lazy('login')
    template_name = 'account/signup.html'

1 Ответ

0 голосов
/ 31 марта 2020

Добавление полей в ModelForm ничего не делает в плане их сохранения, если они не являются полями Model. Поэтому, конечно, address и phone_number не сохраняются, ваша модель User не имеет этих полей.

Вам необходимо иметь Model для сохранения этих полей. Как объяснено здесь , у вас есть две опции:

  • Создание модели Profile для сохранения всех дополнительных полей
  • Создание пользовательской модели User, подклассов AbstractUser или AbstractBaseUser.

Мой совет: делайте оба. Сохраните ваши дополнительные поля в Profile модели. И подкласс AbstractUser, поэтому у вас есть возможность добавить полезные методы и свойства в модель User (прямо сейчас, просто __str__()).

Почему бы не просто подкласс? Потому что, по мере роста вашего приложения, вы захотите добавить еще больше вещей в профиль пользователя. Может быть, вы хотите создать различные типы профилей, например, личный профиль и профессиональный профиль. Сам User должен быть компактным, просто управляя аутентификацией и разрешениями.

Примечание : ваша текущая User модель неверна . Вы не должны подкласс auth.User, но auth.AbstractUser.

...