On Tuesday, May 24, 2011 1:51:30 PM UTC+1, Gchorn wrote:
>
> Hi All,
>
> I'm trying to create a website that aggregates information about the
> various products made by different companies. To that end, I have
> models (classes) for companies, products, and events. Since each
> company has various products, each product is related to one or more
> companies by a ManyToManyKey. Each product has various news events,
> so each event is related to a specific product by ForeignKey as well.
>
> I've used Django's render_to_response shortcut to send a specific
> company as a context to a template, in order to render a webpage that
> lists all of the products made by that specific company in a table.
> Each row in the table is occupied by a different product, and each
> column in the table displays a specific piece of info about that
> product. I want the last column to display the most recent news event
> object for each product, but I can't figure out how to filter for
> this. I currently have the template set to look like this (I'm
> intentionally leaving out some syntax to keep it simple):
>
> for product in company.product_set.all:
> <td>{{product.name}}
> <td>{{product.usage}}
> <td>blah blah blah
> <td>{{product.event_set.all}}
>
> And that last line is where I'm stuck. I want to somehow filter
> "product.event_set.all" for the most recent event associated with that
> product, but I'm not sure how to do that and I can't find it in the
> documentation on the Django website. One of the attributes of the
> "event" class I created is the event date; is there any way to filter
> for the most recent date?
>
> Furthermore, I'd like to make a link out of that latest event that
> will take you to the full story when you click on it. (I am setting
> up the website to have a webpage for each event object, in which the
> full story for the event is displayed. Each "full-story" page will be
> indexed by the id of the event object in question.) I know the basic
> format of this should be:
>
> <td><a href='events/{{event.id}}/'>{{product.event_set.all|
> something}}
>
> But I don't know how to set the "id" variable from within the template
> so that you're automatically taken to the correct page, and I can't
> think of how to set this variable (or context) from the views.py file,
> since its value changes for each product listed in the table.
>
> Can anyone help me with this?
>
> cheers,
> Gchorn
What you really want to do is to call a method on the Product model which
returns the latest event. Actually, there's a built-in queryset function for
this, so you just need to give it the field to order by, which you can do by
setting `get_latest_by = 'event_date'` (or whatever the field name is) in
the Event's inner Meta class.
Then, in the template, you can call that method:
{% with product.event_set.latest as latest_event %}
<a href="{% url event latest_event.id %}">{{ latest_event.name
}}</a>
{% endwith %}
A couple of things there - I'm using `with`, as you reference the event
twice so that'll avoid two separate db hits; and you should always use the
{% url %} tag to look up URLs against your urlconf, rather than hard-coding
them.
--
DR.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en.