HBMCS
HBMCS

Reputation: 776

Accessing additional fields from a grouper in a Django group_by

How can I access fields other than the grouper in a Django group_by function?

class dateEvent(models.Model):

    event = models.ForeignKey('Event', on_delete=models.CASCADE)
    start_date_time = models.DateTimeField(auto_now=False, auto_now_add=False)

    def __str__(self):
        return "%s" % (self.event.title)

    def description(self):
        return "%s" % (self.event.description)

class Event(models.Model):

    description = RichTextUploadingField(max_length=200)

view:

def my_view(request):

    events = dateEvent.objects.all()

    context = {
        'events': events,
    }

    return render(request, 'view.html', context)

template:

<ul>

  {% for event in dateEvents_list %}
      <li><h5>Event: {{ event.grouper }}</h5>
        <h6>Description: {{ event.description }}</h6> #How can access the description of the main event?
      <ul>
          {% for dateEvent in event.list %}
            <li>date: {{ dateEvent.start_date_time }}</li>
          {% endfor %}
      </ul>
      </li>
  {% endfor %}

</ul>

I'd like to have the title, which is the grouper so it's fine, but also the description.

Upvotes: 0

Views: 138

Answers (2)

Dennis Bottaro
Dennis Bottaro

Reputation: 21

You can also access your grouper's list objects to get details about the "first record" in your group. So using:

   event.grouper.list.0.<any_model_field_you_want>

Will work just fine. I have this in production and it solved my needs immediatly. I found this in a rejected feature request for Django here: https://code.djangoproject.com/ticket/13452

If you need to traverse your model's relationship tree you can do the following.

event.grouper.list.0.<related_model_name>.<any_model_field_you_want>

Upvotes: 1

JGC
JGC

Reputation: 6373

You can access model attributes from the grouper directly using event.grouper.<any-model-attribute>.

In your example here is how it would look:

<ul>

  {% for event in dateEvents_list %}
      <li><h5>Event: {{ event.grouper }}</h5>
        <h6>Description: {{ event.grouper.description }}</h6>
      <ul>
          {% for dateEvent in event.list %}
            <li>date: {{ dateEvent.start_date_time }}</li>
          {% endfor %}
      </ul>
      </li>
  {% endfor %}

</ul>

I can't find any documentation around this usage.

Upvotes: 0

Related Questions