首页 > 解决方案 > 尽管使用了 get、filter 和 all,Django 没有返回查询集

问题描述

请我是初学者,我正在尝试制作一个医院管理系统。我想显示患者资料,但它只返回我的查询集中的名字。我需要显示保存到我的数据库中的所有数据。我已经尝试过 filter、get 和 all。它们只返回我的str方法中定义的名字。

意见

def ProfileView(request):
    profile = Patient.objects.filter(email=request.user.email)
    return render(request,'profile.html',{'profile':profile})

楷模

类病人(模型。模型):

first_name = models.CharField(max_length=20)
last_name = models.CharField(max_length=20)
email= models.EmailField(unique=True)
phone_number = models.CharField(max_length=11)
address = models.CharField(max_length=255)

def __str__(self):
    return self.first_name

配置文件.html

{%extends 'base.html'%}
{%load static%}
{%block content%}
<div class="container">
  {{profile}}
</div>
{%endblock content%}

以 html 显示的结果

<QuerySet [<Patient: Kehinde>]>

标签: djangofilterdjango-queryset

解决方案


您可能想要 Profile 和 User 之间的一对一关系,而不是通过电子邮件进行查找

除了.filter()返回QuerySetwhile.get()返回实例之外,您应该使用.filter()

def ProfileView(request):
    profiles = Patient.objects.filter(email=request.user.email)
    return render(request, 'profile.html', {'profiles':profiles})


{%extends 'base.html'%}
{%load static%}
{%block content%}
<div class="container">
{% for profile in profiles %}
  {{profile.first_name}}
  {{profile.last_name}}
{% endfor %}
</div>
{%endblock content%}

.get()如果您只期望单个对象作为结果,则可以使用

def ProfileView(request):
    profile = Patient.objects.get(email=request.user.email)
    return render(request, 'profile.html', {'profile':profile})

推荐阅读