#django #filter #django-queryset
#django #Фильтр #django-queryset
Вопрос:
Пожалуйста, я новичок, и я пытаюсь создать систему управления больницей.Я хочу отобразить профиль пациента, однако он возвращает только первое имя в моем наборе запросов. Мне нужно, чтобы отображались все данные, сохраненные в моей базе данных.Я пробовал filter, get и все.Они возвращают только первое имя, как определено в моем методе str.
Число просмотров
def ProfileView(request):
profile = Patient.objects.filter(email=request.user.email)
return render(request,'profile.html',{'profile':profile})
Модели
класс Patient(модели.Модель):
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
Profile.html
{%extends 'base.html'%}
{%load static%}
{%block content%}
<div class="container">
{{profile}}
</div>
{%endblock content%}
Результат, отображаемый в html
<QuerySet [<Patient: Kehinde>]>
Комментарии:
1. вам нужно перебирать результаты, если вы хотите всегда получать только один результат, используя .get(), а не .filter() docs.djangoproject.com/en/3.1/intro/tutorial03 /…
Ответ №1:
Вероятно, вам нужны взаимно однозначные отношения между профилем и пользователем вместо выполнения поиска по электронной почте
Кроме этого .filter()
возвращает QuerySet
while .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})
Комментарии:
1. Прошу прощения. Но почему мой {{profile. first_name}} не работает?
Ответ №2:
В вашем html:
{{profile}}
отображает profile.str, потому что он доступен для чтения человеком экземпляра.
если вам нужно имя пациента: {{ profile.first_name }}
Комментарии:
1. Я пробовал, это не сработало. Спасибо. Вы только что открыли мне глаза на другие возможности