如何从内置身份验证实现的“用户”表单中保存数据。用户在Django中使用UserCreationForm吗?

嗨,我是Django的新手,我创建了一个Django内置的User和UserCreationForm登录/注销模型。它工作正常,但是我的问题是我在表单中定义了两个自定义输入,并且在运行服务器时显示在网页上,但是当我在admin下检查用户时,我只会看到用户定义字段的详细信息,而没有我的自定义字段。

如何将其数据保存到我的用户模型? 或者,如果我定义的自定义字段错误,该如何更改它,以便将其数据保存在模型中。

我的自定义字段(地址和电话号码)未显示在“管理员用户”中,并且其数据也未保存。

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'

yjc753951 回答:如何从内置身份验证实现的“用户”表单中保存数据。用户在Django中使用UserCreationForm吗?

如果不是ModelForm的字段,则将字段添加到Model不会起到任何作用。因此,当然不会保存addressphone_number,您的User模型没有这些字段。

您需要一个Model来保存这些字段。如here所述,您有两个选择:

  • 创建一个Profile模型以保存所有其他字段
  • 创建一个自定义User模型,将AbstractUserAbstractBaseUser子类化。

我的建议:两者都做。将您的额外字段保存在Profile模型中。 子类AbstractUser,因此您可以选择向User模型中添加有用的方法和属性(现在只是__str__())。

为什么不只是子类?因为随着您的应用程序的增长,您将需要在用户的个人资料中添加更多内容。也许您想创建不同类型的配置文件,例如私人资料和专业资料。 User本身应该紧凑,只管理身份验证和权限。

注意:您当前的User模型是错误。您一定不是子类auth.User,而是auth.AbstractUser

本文链接:https://www.f2er.com/2544150.html

大家都在问