В проекте Django проект показывает, что UserInfo, соответствующий запросу, не существует
Вот код views.py. В секции def index я использую модель UserInfo. Здесь информация хранится в связи один к одному, поэтому я пишу (user__pk=user_id)
from django.shortcuts import render
from Login_app.forms import UserForm, UserInfoForm
from Login_app.models import UserInfo
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.decorators import login_required
from django.urls import reverse
def index(request):
dict={}
if request.user.is_authenticated:
current_user = request.user
user_id = current_user.id
user_basic_info = User.objects.get(pk=user_id)
user_more_info = UserInfo.objects.get(user__pk=user_id)
dict = {'user_basic_info':user_basic_info, 'user_more_info':user_more_info}
return render(request, 'Login_app/index.html', context=dict)
Вот код models.py, где я создаю модель UserInfo. Она хранит пользователя, facebook_id, profile_pc.
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class UserInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
facebook_id = models.URLField(blank=True)
profile_pic = models.ImageField(upload_to = 'profile_pics', blank=True)
def __str__(self):
return self.user.username
Убедитесь, что вы вставили данные в таблицу UserInfo
. Для получения даты, связанной с полем один к одному с таблицей User, вам не нужно извлекать идентификатор пользователя явно. Следующий код должен сделать это-
current_user = request.user
user_more_info= UserInfo.objects.filter(user=current_user).get()
Более того, если у вас есть поле с именем 'full_name' в модели User, вы можете получить к нему прямой доступ -
user_full_name=current_user.full_name