Hennie
Hennie

Reputation: 65

Inserting multiple related model values in template with for loop

I am trying to post multiple values from different models in a for loop in a template. It is not doing what I am planning. I want to display a count of LeadActions that belong to Leads in a table. I did comment the part out that is not working as well. The table should display the list of Leads and the the count of how many overdue actions(LeadActions) there are for that specific lead.

My View

class LeadListView(LoginRequiredMixin, generic.ListView):
    login_url = '/scrty/login/'
    template_name = "nodiso/leadslist.html"
    model = models.Leads
    def get_context_data(self, **kwargs):
        ctx = super(LeadListView, self).get_context_data(**kwargs)
        ctx['actions']= models.LeadActions.objects.all()
        return ctx
    def get_queryset(self):
        return models.Leads.objects.filter(company=self.request.session['compid'],archive=False)

My template

<table class="table">

      <thead>
        <th>Name</th>
        <th>Overdue Tasks</th>
        <th>Total Tasks</th>
      </thead>
      {% for lead in leads_list %}
      {# {% for action in action_list %}#}

      <tr>
        <td><a href="{% url 'nodiso:leaddetail' lead.id %}">{{lead.name}}</a></td>
        <td><span class="badge">{{ actions.name|length }}</span></td>
        <td><span class="badge">42</span></td>
      </tr>

        {# {% endfor %}#}
        {% endfor %}
      </table>

The Models

class LeadActions(models.Model):
    lead = models.ForeignKey(Leads)
    name = models.CharField(max_length=265)
    crdate = models.DateField(auto_now_add=True)
    Duedate = models.DateField()
    creator = models.CharField(max_length=265)
    overdue = models.IntegerField(null=True,blank=True)

    def __str__(self):
        return self.name
class Leads(models.Model):
    company = models.ManyToManyField(Company)
    user = models.ManyToManyField(settings.AUTH_USER_MODEL)
    name = models.CharField(max_length=265)
    email = models.EmailField(max_length=265)
    tel = models.IntegerField()
    archive = models.BooleanField(default=False)
    dateenq = models.DateField(auto_now_add=True,null=True)

    def get_absolute_url(self):
        return reverse('nodisoapp:leadlist')
    def __str__(self):
        return self.name

Upvotes: 0

Views: 14

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599610

You shouldn't be sending the list of actions from the view. Instead, in the template, you can access {{ lead.leadactions_set.count }} to give the count of LeadActions related to each Lead in the loop.

Upvotes: 1

Related Questions