#python #django #django-models #django-forms #django-templates
#python #django #django-модели #django-forms #django-шаблоны
Вопрос:
Я расширил модель пользователя по умолчанию с помощью поля «телефон». Я бы хотел, чтобы пользователь обновил свой номер телефона после регистрации. Проблема в том, что для нового созданного пользователя объект ‘phone’ рассматривается как пустой даже после того, как значение по умолчанию было записано в коде. Если я хочу обновить номер телефона через форму — я получаю сообщение об ошибке: 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()
Комментарии:
1. можете ли вы показать, что показывает экземпляр печати? в представлении save_user_profile
2. я не пользователь, если я правильно понял ваш запрос, надеюсь, я это сделал. когда я загружаю шаблон, я получаю это в терминале — django.contrib.auth.models.User.profile. RelatedObjectDoesNotExist: у пользователя нет профиля.
Ответ №1:
Вы можете попытаться проверить пользователя, которого вы получаете, через объект запроса, т.е. request.user и user, существующий в базе данных с профилем. Если они оба одинаковы, вы можете попробовать выполнить следующую команду:
python manage.py shell
Импортируйте модели приложения проекта, над которым вы работаете, и моделируйте запросы в views.py . Это поможет в проверке корректного доступа к данным БД в Django.