Я получил ошибку запроса при вызове логина пользователя в 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
Возможно, существует экземпляр User
для пользователя, под которым вы пытаетесь войти в систему, однако это не означает, что существует и Profile
. Вам необходимо убедиться, что у каждого User
есть профиль. Есть несколько способов сделать это:
- (Рекомендуется) Переопределите метод
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)
- Обработка действия по вызову 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
или что угодно, что лучше всего подходит для вашей логики бэкенда!