数据未存储在数据库中,用于UserRegsitrationForm django的选择字段

问题描述 投票:0回答:1

我扩展了Django的UserCreationForm,以添加其他字段:电子邮件和选择字段。现在,当我在注册表中填写这些详细信息并提交时。仅电子邮件存储在数据库中,而不存储在选择字段(即代码中的状态)。但是,当我在控制台中查看表单的字段时,会显示选择字段。但是,当我使用django shell访问属性时,出现错误

from django.contrib.auth.models import User
users = User.objects.all()
users[6].email
Output : [email protected] # success

users[6].status
Error: AttributeError                            Traceback (most recent call last)
<ipython-input-7-c9d2701fa919> in <module>()
----> 1 users[6].status

AttributeError: 'User' object has no attribute 'status'

这是我的forms.py

from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User

class SignUpForm(UserCreationForm):
    STATUS_CHOICES = (
        (1, ("CEO")),
        (2, ("Dev Manager")),
        (3, ("Testing Manager")),
        (4, ("Developer")),
        (5, ("Test Engineer"))
    )
    email = forms.EmailField(required=True,
                         label='Email',
                         error_messages={'exists': 'Oops'})
    status = forms.ChoiceField(choices = STATUS_CHOICES, label="Designation", initial='Developer', widget=forms.Select(), required=True)



    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2", "status")

        def save(self, commit=True):
            user = super(UserCreateForm, self).save(commit=False)
            user.email = self.cleaned_data["email"]
            user.status = self.cleaned_data["status"]
            if commit:
                user.save()
            return user

我为什么会出错。我要去哪里错了。任何帮助将不胜感激。

python django django-models django-forms django-users
1个回答
0
投票

仅将字段添加到表单中是不够的,还必须将其添加到模型中。

为此,您需要在models.py中创建一个自定义用户类:

from django.contrib.auth.models import AbstractUser

STATUS_CHOICES = (
    (1, ("CEO")),
    (2, ("Dev Manager")),
    (3, ("Testing Manager")),
    (4, ("Developer")),
    (5, ("Test Engineer"))
)
class User(AbstractUser):
    status forms.ChoiceField(choices = STATUS_CHOICES, verbose_name ="Designation")

然后您必须更改设置AUTH_USER_MODEL以相应地指向您的模型。

现在您可以在表格中使用模型:

from django.contrib.auth.models import User

class SignUpForm(UserCreationForm):
    ...

    class Meta:
        model = User

请参阅Substituting a custom User model上的文档

© www.soinside.com 2019 - 2024. All rights reserved.