我使用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 }}
仅会呈现username
和password
以及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'")
答案 0 :(得分:0)
您需要创建两个单独的表单,每个表单对应一种帐户类型。然后在views.py中,您应该检查正在创建的帐户类型,然后使用相应的表单。
您发布的表单以User
为模型,我猜是默认的Django User实现。你不应该使用它,而应该使用你的特定模型。
总的来说,看起来你并不完全理解Django的ModelForm是如何工作的,我认为你最好先阅读这里的文档:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/