Сравнение объектов языка шаблонов Django
Я довольно новичок в Django. У меня есть база данных с Events. Я хочу отобразить имя объекта Organisation, где org_id является внешним ключом в модели событий. Мой подход заключался в том, чтобы загрузить все объекты, а затем выполнить итерацию по ним, но я не получаю никакого результата на сайте. Мне кажется, что это связано с языком шаблонов
models.py
class Organisation(models.Model):
org_id=AutoSlugField(unique=True)
name = models.CharField(max_length=200)
email=models.EmailField(max_length = 250)
class Event(models.Model):
event_id = AutoSlugField(unique=True)
name = models.CharField(max_length=100)
date = models.DateField()
event_category = models.CharField(max_length=50)
duration= models.IntegerField()
org_id = models.ForeignKey(Organisation,on_delete=models.CASCADE)
maxparticipants= models.IntegerField()
teacher_id=models.ForeignKey(User,on_delete=models.CASCADE)
релевантный фрагмент из файла event_details.html
<h3>Hosting Body</h3>
{% for org in orgs%}
{%if org.org_id == event.org_id %}
<p>{{org.name}}</p>
{%endif%}
{%endfor%}
<h3>Date</h3>
<p>{{event.date}}</p>
views.py
def event_details(request,pk):
event=Event.objects.get(event_id=pk)
orgs=Organisation.objects.all()
context={'event':event,'orgs':orgs}
return render(request,'event_details.html',context)
Вы можете оказать соответствующую организацию с помощью:
<h3>Hosting Body</h3>
<p>{{ event.org_id.name }}</p>
<h3>Date</h3>
<p>{{ event.date }}</p>
Вы можете повысить эффективность, извлекая данные Event и Organisation в одном запросе с помощью:
from django.shortcuts import get_object_or_404
def event_details(request, pk):
event = get_object_or_404(Event.objects.select_related('org_id'), event_id=pk)
context = {'event':event}
Примечание: Часто лучше использовать
get_object_or_404(…)[Django-doc], чем использовать.get(…)[Django-doc] напрямую. В случае, если объект не существует, например, потому что пользователь сам изменил URL,get_object_or_404(…)приведет к возврату ответа HTTP 404 Not Found, в то время как использование.get(…)приведет к ответу HTTP 500 Server Error.
Примечание: Обычно не добавляют суффикс
._idк полюForeignKey, так как Django автоматически добавит поле-"близнец" с суффиксом_id. Поэтому он должен бытьorg, вместо.org_id
в вашем шаблоне измените его на:
<h3>Hosting Body</h3>
{% for org in orgs%}
{%if org.org_id == event.org_id.org_id %}
<p>{{org.name}}</p>
{%endif%}
{%endfor%}
<h3>Date</h3>
<p>{{event.date}}</p>