我正在try 为我的Django应用程序实现用户注册.我读的书提到了UserCreationForm,但我需要的不仅仅是名称、密码和邮箱地址.我想我可以实现我自己的User对象并使用ModelForm,但是这样我就失go 了一些用于身份验证的Django便利.最后,我读到了一些关于UserProfiles的内容,我想UserProfiles可以补充用户,所以我认为我需要这些东西的某种组合.这是我到目前为止的资料.

视图-这很简单.我想做的就是创建我的表单并保存用户

def main(request):
    rform1 = forms.RegisterForm1()
    rform2 = forms.RegisterForm2()
    return render_to_response("authentication/index.html", {'form1': rform1, 'form2':rform2})

def register(request):
    if request.method == 'POST':
        rform1 = forms.RegisterForm1(request.POST)
        rform2 = forms.RegisterForm2(request.POST)
        if rform1.is_valid() and rform2.is_valid():
            new_user = rform1.save()
            return HttpResponseRedirect("/register-success/")
    return render_to_response("authentication/index.html", {'form1': rform1,'form2':rform2})

表单-这是我用于创建用户的表单.或者至少是它开始的时候

class RegisterForm1(forms.ModelForm):
    class Meta:
        model = User

class RegisterForm2(forms.ModelForm):
    class Meta:
        model = UserProfile

模型-这是我的用户配置文件,我想补充用户配置文件.

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    phonenumber = PhoneNumberField()

清楚我想做什么吗?我走对了吗

推荐答案

制作two个模型表单,一个用于User模型,一个用于UserProfile模型.

class UserForm(django.forms.ModelForm):
    class Meta:
        model = User  

class UserProfileForm(django.forms.ModelForm):
    class Meta:
        model = UserProfile
        exclude = ['user']

为它们添加前缀,并将它们一起显示在同一个HTML表单元素中.在视图中,在保存用户和UserProfile之前,判断两者是否都有效.

def register(request):
    if request.method == 'POST':
        uf = UserForm(request.POST, prefix='user')
        upf = UserProfileForm(request.POST, prefix='userprofile')
        if uf.is_valid() * upf.is_valid():
            user = uf.save()
            userprofile = upf.save(commit=False)
            userprofile.user = user
            userprofile.save()
            return django.http.HttpResponseRedirect(…something…)
    else:
        uf = UserForm(prefix='user')
        upf = UserProfileForm(prefix='userprofile')
    return django.shortcuts.render_to_response('register.html', 
                                               dict(userform=uf,
                                                    userprofileform=upf),
                                               context_instance=django.template.RequestContext(request))

register.html年:

<form method="POST" action="">
    {% csrf_token %}
    {{userform}}
    {{userprofileform}}
    <input type="submit">
</form>

Django相关问答推荐

为什么当对字段使用自定义序列化器时,Django Rest框架中Inbox字段会消失?

在AWS s3中获取项目的URL

如何显示;Django认证系统;在模板中?

如何删除Docker上的django应用程序?

如何创建复杂的查询?| ChartJS 和 Django

如何在 Django 中将下一个 8 月 1 日添加为 DateTimeField 默认值

如何让两个模型相互引用 Django

文档中的 Mongoengine creation_time 属性

Django - 如何在其管理模块中访问模型的详细名称?

在 Django 网站上找不到页面 404?

django- nginx: [emerg] open() "/etc/nginx/proxy_params" 在 /etc/nginx/sites-enabled/myproject:11 中失败(2:没有这样的文件或目录)

如何在 django admin 中显示布尔属性

related_name 参数在 Django 模型中没有按预期工作?

django:TypeError:'tuple'对象不可调用

Django:如何将数据保存到 ManyToManyField?

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

将属性添加到 Django 模型的 Meta 类中

为什么我的 Django 单元测试不知道安装了 MessageMiddleware?

如何将类、id、占位符属性添加到 django 模型表单中的字段

何时使用 Django get_absolute_url() 方法?