Python社区  »  Django

如何在Django的注册表中添加两个模型?

danny_boy • 1 周前 • 15 次点击  

我想创建一个包含两个模型的注册表。一个模型是我的自定义模型(Profile),另一个是Django中的默认用户模型。我在同一模板中创建了两个单独的表单,但数据未成功存储这就是我到目前为止所做的:

型号.py:

from django.db import models
from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    company = models.CharField(max_length=100, blank=True, null=True)
    address = models.TextField()

视图.py:

def register(request):
    if request.method == 'POST': 
        user_form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if user_form.is_valid() and profile_form.is_valid():  
            user_form.save()
            profile_form.save()
            return redirect('login')
    else:
        user_form = UserForm()
        profile_form = ProfileForm()
    return render(request, 'register_page.html', {'user_form': user_form, 'profile_form': profile_form})

forms.py格式:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from .models import Profile

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

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

class ProfileForm(forms.ModelForm): 

    class Meta:
        model = Profile
        fields = ['company', 'address']

但是,当我尝试注册一个新用户时,数据保存在用户模型(用户名、电子邮件、密码)中,而不是配置文件模型(公司、地址)中。

我得到的是这个错误:

RelatedObjectDoesNotExist at /
Profile has no user.

我该怎么办?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50707
 
15 次点击  
分享到微博
文章 [ 1 ]  |  最新文章 1 周前
arjun
Reply   •   1 楼
arjun    1 周前

自从你 Profile 模型连接到 User 模型通过 OneToOne 关系,因此您需要将用户分配给您的配置文件,如下所示:

if user_form.is_valid() and profile_form.is_valid():
user = user_form.save() profile = profile_form.save(commit = False)
# assign user to your profile
profile.user = user profile.save()
return redirect('login')