Skip to main content
 首页 » 编程设计

python之Django 使用用户配置文件扩展用户(错误 : User has no profile.)

2024年08月19日40cyq1162

有人可以告诉我,为什么这段代码不起作用? 我正在尝试为用户创建注册表单。

I'm getting an error

"RelatedObjectDoesNotExist at /signup/client/2/ User has no profile."

View .py

if request.POST: 
            user_form = UserCreationForm(request.POST) 
            profile_form = ProfileForm(request.POST) 
            if user_form.is_valid() and profile_form.is_valid(): 
                user = user_form.save() 
                user.profile.city="WW" 
                user.profile.phone="32323" 
                user.profile.save() 

表单.py

class UserForm(forms.ModelForm): 
    class Meta: 
        model = User 
        fields = ('first_name', 'last_name', 'email') 
 
class ProfileForm(forms.ModelForm): 
    class Meta: 
        model = Profile 
        fields = ( 'city', 'phone') 

html文件

  <h2>Sign up</h2> 
  <form method="post"> 
    {% csrf_token %} 
    {{ user_form.as_p }} 
    {{ profile_form.as_p }} 
    <button type="submit">Sign up</button> 

模型.py

from __future__ import unicode_literals 
from django.contrib.auth.models import User 
from django.db import models 
from django.db.models.signals import post_save 
from django.dispatch import receiver 
 
class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    city = models.TextField(max_length = 50) 
    phone = models.TextField(max_length = 12) 

请您参考如下方法:

您需要创建一个profile,它不会在您保存user_form时创建

        user_form = UserCreationForm(request.POST) 
        profile_form = ProfileForm(request.POST) 
        if user_form.is_valid() and profile_form.is_valid(): 
            user = user_form.save() 
            Profile.objects.create(**{ 
                 'city':"WW", 'phone': '32323', 'user': user 
            }) 
            # ^^^^^^