无法在自定义usercreateform

时间:2017-09-29 05:18:56

标签: django django-forms

我一直在尝试使用django中的扩展用户模型创建自定义注册表单。我尝试添加的一个自定义字段是用户类型,它只能是"员工"或"管理员"。

我的signUpForm类看起来像这样

from .models import EMPLOYEE_TYPE_CHOICES 

class SignUpForm(UserCreationForm):
usertype = forms.CharField(
    max_length=10,
    choices=EMPLOYEE_TYPE_CHOICES,
)
userID = forms.CharField(label="User ID")

class Meta:
    model = User
    fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2', 'userID', 'usertype')

EMPLOYEE_TYPE_CHOICES来自我的models.py,看起来像这样

EMPLOYEE_TYPE_CHOICES = (
    ('admin', 'Admin'),
    ('employee', 'Employee'),
)
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
ADMIN = 'Admin'
EMPLOYEE = 'Employee'
EMPLOYEE_TYPE_CHOICES = (
    (ADMIN, 'Admin'),
    (EMPLOYEE, 'Employee'),
)
usertype = models.CharField(
    max_length=10,
    choices=EMPLOYEE_TYPE_CHOICES,
)
userID = models.CharField(
    max_length=10,
)

运行服务器时,收到错误 TypeError: init ()得到了一个意外的关键字参数'选择'

是否有不同的方法可以将选项添加到表单字段中?

1 个答案:

答案 0 :(得分:0)

您的错误来源是由于使用CharField而不是使用ChoiceField。 https://docs.djangoproject.com/en/1.11/ref/forms/fields/#choicefield

即使你想要完成的是什么,也不会使用创建的表单。您必须为Profile模型创建ModelForm。然后,您可以只在模板上渲染字段。