Home > Mobile >  Filtering the last Query Created and Iterating through manytomany relationship in a Django Project
Filtering the last Query Created and Iterating through manytomany relationship in a Django Project

Time:10-10

I have the following model:

class Log(models.Model):
    log_order = models.IntegerField(validators=[MinValueValidator(1)],blank=True, null=True)

class ActiveSession(models.Model):
    log = models.ManyToManyField(Log, related_name='savedlogs')

In my view I am trying to get the very last create ActiveSession which has a many to many relationship with Log model to iterate between them.

This is how I created the views:

def get_context_data(self, **kwargs):
     active_session =ActiveSession.objects.get(id=ActiveSession.objects.last().id)
     context = super().get_context_data(**kwargs)
     return context

I think my problem is with the get i tried using filter(id=id).latest but it did not work.

here is the template:

    {% for x in active_session %}
     {{ x.log_order }}
    {% endfor %}

I am currently getting TypeError: 'ActiveSession' object is not iterable

my question:

How to fix this error and how can I use the for loop in the template to display the details of each Log which is inside each ActiveSession.

In this example there are 3 Logs inside the Active session and I want to show the log_order of each

CodePudding user response:

You should pass the single ActiveSession object to the template and then iterate though the log instance associated with the session.

class FooView(generic.View):
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["active_session"] = ActiveSession.objects.last()
        return context

# template.html
{% for log in active_session.log.all %}
    {{ log }}
{% endfor %}
  • Related