社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

danny_boy • 5 年前 • 1619 次点击  

我想创建一个包含两个模型的注册表。一个模型是我的自定义模型(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
 
1619 次点击  
文章 [ 1 ]  |  最新文章 5 年前
arjun
Reply   •   1 楼
arjun    5 年前

自从你 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')