【问题标题】:Django not returning queryset despite using get,filter and all尽管使用了 get、filter 和 all,Django 没有返回查询集
【发布时间】:2021-03-06 04:18:29
【问题描述】:

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

观看次数

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

型号

类患者(models.Model):

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>]>

【问题讨论】:

标签: django filter django-queryset


【解决方案1】:

您可能希望个人资料和用户之间建立一对一的关系,而不是通过电子邮件进行查找

除此之外,.filter() 返回 QuerySet.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})

【讨论】:

  • 对不起。但是为什么我的 {{profile.first_name}} 不起作用?
【解决方案2】:

在您的 html 中:

{{profile}}

显示配置文件。str,因为它是实例的人类可读的。

如果您想要患者的名字:{{ profile.first_name }}

【讨论】:

  • 我试过了,还是不行。谢谢。你让我看到了其他的可能性
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 2015-10-17
  • 2021-06-02
  • 2017-12-05
  • 2019-02-06
  • 1970-01-01
相关资源
最近更新 更多