【问题标题】:Django - RelatedObjectDoesNotExist even after default value have been writtenDjango - 即使在写入默认值之后,RelatedObjectDoesNotExist
【发布时间】:2020-10-06 10:15:08
【问题描述】:

我已经使用“电话”字段扩展了默认用户模型。 我希望用户在注册后更新他们的电话号码。 问题在于,即使在代码中写入了默认值后,新创建的用户“电话”对象仍被视为空。 如果我想通过表单更新电话号码 - 我收到错误消息: RelatedObjectDoesNotExist 在 /phone 用户没有个人资料。

当我通过管理面板检查用户的属性时,我看到该字段具有默认值(在我的情况下为 111),但由于某种原因,当我加载模板时出现空对象错误。

models.py

# extending profile 
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone = models.IntegerField(max_length=12, default=111) 

views.py:

def update_profile(request):
    profile_form = ProfileForm(instance=request.user.profile)
    return render(request, 'phone.html', {

        'profile_form': profile_form
    })

phone.html

<form method="post">
  {% csrf_token %}

  {{ profile_form.as_p }}
  <button type="submit">Save changes</button>
</form>

signals.py

from django.db import models
from django.contrib.auth.models import User
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)
    phone = models.IntegerField(max_length=12, default=111)  

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

【问题讨论】:

  • 你能显示打印实例显示什么吗?在 save_user_profile 视图中
  • 如果我得到您的要求,我不是用户,希望我做到了。当我加载模板时,我在终端中得到了这个 - django.contrib.auth.models.User.profile.RelatedObjectDoesNotExist: User has no profile.

标签: python django django-models django-forms django-templates


【解决方案1】:

您可以尝试检查您通过请求对象获取的用户,即 request.user 和数据库中存在的用户以及配置文件。如果它们都相同,那么您可以尝试运行以下命令:

python manage.py shell

导入您正在处理的项目应用的模型并在 views.py 中模拟查询。它将有助于验证在 Django 中正确访问的数据库数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多