Я получил ошибку запроса при вызове логина пользователя в django

views.py

from .models import Profile
@login_required(login_url='/signin')
def settings(request):
    user_profile=Profile.objects.get(user=request.user)
    return render(request,'setting.html',{'user_profile':user_profile})

Я думаю, что ошибка в :user_profile=Profile.objects.get(user=request.user) но я не знаю почему

models.py

from django.contrib.auth.models import User
from django.db import models
class Profile(models.Model):
    user         = models.ForeignKey(User, on_delete=models.CASCADE)
    id_user      = models.IntegerField()
    bio          = models.TextField(blank=True)
    profileimg   = models.ImageField(upload_to='profile_pics/', default='default-profile.png')
    location     = models.CharField(max_length=300, blank=True)
    birth_date   = models.DateField(null=True, blank=True)

ERROR

enter image description here

Возможно, существует экземпляр User для пользователя, под которым вы пытаетесь войти в систему, однако это не означает, что существует и Profile. Вам необходимо убедиться, что у каждого User есть профиль. Есть несколько способов сделать это:

  1. (Рекомендуется) Переопределите метод save() на User, чтобы автоматически создавать Profile при создании нового пользователя. например:
class User(..):
    # user properties

    def save(self, *args, **kwargs):
        if not self.pk:
            Profile.objects.create(user=user)
        super(MyModel, self).save(*args, **kwargs)
  1. Обработка действия по вызову API. Таким образом, в вашей функции вы можете проверить, есть ли у пользователя профиль, если нет, вы можете захотеть создать его. Например:
def settings(request):
    user_profile=Profile.objects.get_or_create(user=request.user)
    return render(request,'setting.html',{'user_profile':user_profile})

Здесь я использовал get_or_create, но вы можете свободно использовать блоки try/except или что угодно, что лучше всего подходит для вашей логики бэкенда!

Вернуться на верх