Home > OS >  Django Templating Language objects comparison
Django Templating Language objects comparison

Time:02-17

I'm fairly new to Django. I have a database with Events. I want to display the name of the Organisation where org_id is the foreign key in the events model. My approach was to load in all the objects and then do some iterating through them but I get no output on the website. I feel like its got to do something with the templating language

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)

releveant snippet from 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)

CodePudding user response:

You can render the relevant organization with:

<h3>Hosting Body</h3>
<p>{{ event.org_id.name }}</p>

<h3>Date</h3>
<p>{{ event.date }}</p>

You can boost efficiency by fetching the Event and Organisation data in the same query with:

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}

Note: It is often better to use get_object_or_404(…) [Django-doc], then to use .get(…) [Django-doc] directly. In case the object does not exists, for example because the user altered the URL themselves, the get_object_or_404(…) will result in returning a HTTP 404 Not Found response, whereas using .get(…) will result in a HTTP 500 Server Error.


Note: Normally one does not add a suffix _id to a ForeignKey field, since Django will automatically add a "twin" field with an _id suffix. Therefore it should be org, instead of org_id.

CodePudding user response:

in your template change it to:

<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>
  • Related