Django extending user with userprofile (error: User has no profile.)

Django extending user with userprofile (error: User has no profile.)

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

I'm getting an error

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

views.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()

forms.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>

models.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
            })
            # ^^^^^^

您应该在脚本中添加以下行:

profile = Profile.objects.create(user=request.user)

我相信此代码引用自 'Django by Examples'。如果是这样,请转到您的应用程序管理站点并在配置文件帐户下手动添加配置文件,然后再次 运行 服务器。这将解决问题。

在开发过程中最好和最简单的事情是:

  1. 在终端中创建另一个超级用户 -$ python manage.py createsuperuser
  2. 使用新凭据登录管理页面
  3. 删除旧管理员或可能在用户配置文件之前创建的任何用户 已创建模型