首页 > 解决方案 > 要求用户在 UserCreationForm 中填写 Django 中的名字和姓氏等 User 模型的默认字段的最简单方法是什么?

问题描述

我正在使用 Django 内置的身份验证视图和表单来创建注册/登录系统,并且我正在使用 UserCreationForm 来注册用户,但只需要用户名。我只想让其他用户字段也是必需的。在不创建新用户模型的情况下,最简单的方法是什么?

这是我的表格:

# Create user registration form class.
class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = User
        fields = UserCreationForm.Meta.fields + ('first_name', 'last_name', 'email',)

以下是我的观点:

def register(request):
    if request.user.is_authenticated:
        return HttpResponseRedirect(reverse('index'))
    elif request.method == 'GET':
        form = CustomUserCreationForm()
    elif request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            context = {
                'user': request.user,
            }
            return HttpResponseRedirect(reverse('index'), context)
        else:
            return HttpResponseRedirect(reverse('register'))
    else:
        return HttpResponse("Project 3: TODO")

    context = {
        'form': form,
    }

    return render(request, 'registration/signup.html', context)

标签: djangodjango-modelsdjango-forms

解决方案


您可以覆盖表单上的名字和姓氏字段以使其成为必填项。请注意,这不会改变数据库表仍然允许这些字段为空值的事实

class CustomUserCreationForm(UserCreationForm):

    first_name = forms.CharField(required=True, max_length=150)
    last_name = forms.CharField(required=True, max_length=150)

    class Meta:
        model = User
        fields = UserCreationForm.Meta.fields + ('first_name', 'last_name', 'email',)

推荐阅读