【发布时间】: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