选择要创建用户的帐户

时间:2014-08-25 13:08:05

标签: python django django-models django-forms django-views

我使用Abstractuser创建了两种类型的用户帐户。

#models.py
class Profile(AbstractUser):
    pass
class first(profile):
    field = # Model field here
class second(profile):
    field = # model field here

用户在此处创建表单

#forms.py
class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')

这里的视图功能

#views.py
if form.is_valid():
    new_user = User.objects.create_user(**form.cleaned_data)
    new_user.save()

我已经完成了我的HTML以选择创建用户帐户所需的帐户类型?所以用户先选择然后相应的字段将启用..

这是我的问题:

目前{{ form }}仅会呈现usernamepassword以及email来创建帐户。但我在第一和第二帐户模块中有很多字段。如何正确form.py,还需要views.py中的任何修改吗?

编辑:

def letsadduser(request):
    if request.method == "POST":
        form = UserForm(request.POST)
        form_first = FirstForm(request.POST, request.FILES)
        if form.is_valid() and form_first.is_valid():
            User = get_user_model()
            new_user = User.objects.create_user(**form.cleaned_data)

            form_first = Artist()
            form_first.artist_name = request.POST['artist_name']
            form_first.music_genre = request.POST['music_genre']
            form_first.profile_image = request.FILES['profile_image']
            form_first.save()
            new_user.save()

现在的错误是(1062, "Duplicate entry '' for key 'username'")

1 个答案:

答案 0 :(得分:0)

您需要创建两个单独的表单,每个表单对应一种帐户类型。然后在views.py中,您应该检查正在创建的帐户类型,然后使用相应的表单。

您发布的表单以User为模型,我猜是默认的Django User实现。你不应该使用它,而应该使用你的特定模型。

总的来说,看起来你并不完全理解Django的ModelForm是如何工作的,我认为你最好先阅读这里的文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/