如何在django注册表中添加额外的字段?

时间:2017-08-16 07:58:18

标签: python django django-registration

我有一个在视图中生成的注册表单。现在我需要从其他模型中添加一些字段。如何更改视图以从其他模型添加字段?

这是我的观看代码:

def register(request):
    """ User registration """
    if auth.get_user(request).username:
        return redirect('/')

    context = {}
    context.update(csrf(request))
    context['form'] = UserCreationForm()
    if request.POST:
        newuser_form = UserCreationForm(request.POST)
        if newuser_form.is_valid():
            newuser_form.save()
            newuser = auth.authenticate(username=newuser_form.cleaned_data['username'],
                                    password=newuser_form.cleaned_data['password2'])
        auth.login(request, newuser)
        return redirect('/')
        else:
            context['form'] = newuser_form

    return render(request, 'user_auth/user_auth_register.html', context)

2 个答案:

答案 0 :(得分:3)

这样的事可以帮到你:

usersarray

基本上,扩展from django import forms from django.contrib.auth.models import User from django.contrib.auth.forms import UserCreationForm class UserCreateForm(UserCreationForm): extra_field = forms.CharField(required=True) class Meta: model = User fields = ("username", "extra_field", "password1", "password2") def save(self, commit=True): user = super(UserCreateForm, self).save(commit=False) user.extra_field = self.cleaned_data["extra_field"] if commit: user.save() return user 并添加额外字段。另外,请将其保存在UserCreationForm方法中。

希望它有所帮助。

答案 1 :(得分:1)

默认情况下,UserCreationForm随附用户名,密码,名字,姓氏,电子邮件。

我想添加其他信息字段(使用ProfileUpdateForm实际上很容易完成),但是我希望它包含在初始注册表单中,因此用户只需要提交一次即可。

解决方案是使用两种形式并将其组合。魔术是启动手动数据库刷新以访问新创建的配置文件

参考:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

views.py

firebase deploy

forms.py

def register(request):
if request.method == 'POST':
    form = UserRegisterForm(request.POST)
    p_reg_form = ProfileRegisterForm(request.POST)
    if form.is_valid() and p_reg_form.is_valid():
        user = form.save()
        user.refresh_from_db()  # load the profile instance created by the signal
        p_reg_form = ProfileRegisterForm(request.POST, instance=user.profile)
        p_reg_form.full_clean()
        p_reg_form.save()
        messages.success(request, f'Your account has been sent for approval!')
        return redirect('login')
else:
    form = UserRegisterForm()
    p_reg_form = ProfileRegisterForm()
context = {
    'form': form,
    'p_reg_form': p_reg_form
}
return render(request, 'users/register.html', context)

models.py

class UserRegisterForm(UserCreationForm):
email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

class ProfileRegisterForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['city', 'state', 'country', 'referral']