首页 > 解决方案 > 在 Django Project 中显示 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 code.where我创建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

标签: pythondjangoauthentication

解决方案


确保您已在UserInfo表中插入数据。要使用 User 表获取与一对一字段相关的日期,您不必显式提取用户 ID。下面的代码应该做到这一点 -

current_user = request.user
user_more_info= UserInfo.objects.filter(user=current_user).get()

此外,如果您在 User 模型中有一个名为“full_name”的字段,您可以直接访问它 -

user_full_name=current_user.full_name

推荐阅读