Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Removing Queryset <>tags from being displayed with my query

I am trying to display a query to a template and I am getting the correct data output but it is being displayed with Queryset<>tags, I believe the reason for this is using .all within my template to make the query but I am unable to figure out how I would display the information with out using .all

models.py

class SectionMeetingDate(models.Model):
    section_date = models.DateField()
    # time stamps when a cost center is created or updated
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return str(self.section_date)

class SectionMeeting(models.Model):
    user = models.CharField(max_length=200)
    section_meeting_date = models.ManyToManyField(SectionMeetingDate, related_name='section_meeting_date')
    # time stamps when a cost center is created or updated
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return str(self.user)

class CostCenterID(models.Model):
    name = models.CharField(max_length=200)
    dept_leader = models.CharField(max_length=200, null=True, blank=True)
    section_leader = models.ManyToManyField(SectionMeeting, related_name='section_leader')
    department_meeting = models.ManyToManyField(DepartmentMeeting, related_name='section_leader')
    # time stamps when a cost center is created or updated
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

views.py

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

def cost_center_id(request, pk):
    # provides the name of the section leaders for each cost center ID
    names = CostCenterID.objects.get(id=pk) 
    context = {
        'names':names,
               }
    return render(request, 'DeptSummary/cost_center_id.html', context)

cost_center_id.html

{% for section_leaders in names.section_leader.all %}

<h5>
    Section Leader --
    <a href="{% url 'section_leader_date' section_leaders.id %}">
        {{ section_leaders }}
    </a>
    -- Total -- {{section_leaders.section_meeting_date.count}}

    -- {{section_leaders.section_meeting_date.all}}
</h5>
   {% endfor %}

currently my template is displaying:
Section Leader — Albin Ortiz — Total — 1 — <QuerySet [<SectionMeetingDate: 2023-05-08>]>

what I want is:
Section Leader — Albin Ortiz — Total — 1 — 2023-05-08

I have tried rewriting my query a few different ways but am unable to figure out how to display my information without the Queryset tags.

>Solution :

Enumerate over the queryset:

{% for section_leaders in names.section_leader.all %}<h5>
  Section Leader -- <a href="{% url 'section_leader_date' section_leaders.id %}">{{ section_leaders }}</a>
  -- Total -- {{ section_leaders.section_meeting_date.count }} --
  {% for meeting in section_leaders.section_meeting_date.all %} {{ meeting }} {% endfor %}
</h5>{% endfor %}

I would furthermore advice to prefetch the section_leaders and their section_meeting_dates to prevent N+1 problems:

from django.shortcuts import get_object_or_404


def cost_center_id(request, pk):
    # provides the name of the section leaders for each cost center ID
    names = get_object_or_404(
        CostCenterID.objects.prefetch_related(
            'section_leader__section_meeting_date'
        ),
        pk=pk,
    )
    context = {
        'names': names,
    }
    return render(request, 'DeptSummary/cost_center_id.html', context)

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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading